pashulka » 30 янв 2007, 21:58
Kostero, Попробуйте использовать что-то вроде :
Код: Выделить всё
Private Sub ChangeFormating() 'MS Excel 2000, …
Application.ScreenUpdating = False
For Each iWord In Split("текст;формула;константа", ";")
With ThisWorkbook.Worksheets(1)
'укажите свою книгу/лист, лист не должен быть защищён (2000), т.к.
'возможность изменения параметров форматирования нижеуказанным
'способом появилась только в MS Excel XP
'(при установке опции разрешить форматирование ячеек)
Dim iCell As Range
Set iCell = .UsedRange.Find _
(What:=iWord, LookIn:=xlValues, LookAt:=xlPart)
If Not iCell Is Nothing Then
iAddress$ = iCell.Address
Do
If Not iCell.HasFormula Then
iPosition% = InStr(iCell.Value, iWord)
'если существует вероятность, что одно слово
'может встречаться в ячейке более одного раза
'то это необходимо учесть
With iCell.Characters _
(Start:=iPosition%, Length:=Len(iWord))
.Font.Bold = True
.Font.Color = vbRed
End With
End If
Set iCell = .UsedRange.FindNext(After:=iCell)
Loop While Not iCell Is Nothing And iCell.Address <> iAddress$
End If
End With
Next
Application.ScreenUpdating = True
End Sub
Кстати, если заменить Split("текст;формула;константа", ";") на Array("текст", "формула", "константа") то вышеопубликованный вариант можно использовать в более ранних версиях. Однако, применение функции Split позволяет задавать список нужных слов в виде строки.
Aent, Стандартные функции рабочего листа не меняют параметры форматирования.
[b]Kostero[/b], Попробуйте использовать что-то вроде :
[code]Private Sub ChangeFormating() 'MS Excel 2000, …
Application.ScreenUpdating = False
For Each iWord In Split("текст;формула;константа", ";")
With ThisWorkbook.Worksheets(1)
'укажите свою книгу/лист, лист не должен быть защищён (2000), т.к.
'возможность изменения параметров форматирования нижеуказанным
'способом появилась только в MS Excel XP
'(при установке опции разрешить форматирование ячеек)
Dim iCell As Range
Set iCell = .UsedRange.Find _
(What:=iWord, LookIn:=xlValues, LookAt:=xlPart)
If Not iCell Is Nothing Then
iAddress$ = iCell.Address
Do
If Not iCell.HasFormula Then
iPosition% = InStr(iCell.Value, iWord)
'если существует вероятность, что одно слово
'может встречаться в ячейке более одного раза
'то это необходимо учесть
With iCell.Characters _
(Start:=iPosition%, Length:=Len(iWord))
.Font.Bold = True
.Font.Color = vbRed
End With
End If
Set iCell = .UsedRange.FindNext(After:=iCell)
Loop While Not iCell Is Nothing And iCell.Address <> iAddress$
End If
End With
Next
Application.ScreenUpdating = True
End Sub[/code]
Кстати, если заменить Split("текст;формула;константа", ";") на Array("текст", "формула", "константа") то вышеопубликованный вариант можно использовать в более ранних версиях. Однако, применение функции Split позволяет задавать список нужных слов в виде строки.
[b]Aent[/b], Стандартные функции рабочего листа не меняют параметры форматирования.