Есть множество документов в Excel пример приложил. Пытался сам разобраться, но так как мои познания в VBA стремятся к НУЛЮ))) ни чего не вышло. Цель вроде не сложна: Есть список слов (который должен быть в теле макроса, чтобы применить его можно было к любому документу) список периодически дополнятся. Так вот необходимо, что бы макрос находил по всему документу эти слова и выделял их ЦВЕТОМ - красным, только не шрифт делал красный, а именно цветовое выделение.
Есть пример кода для Word (делает тоже самое, что мне нужно и в Excel) - не знаю на сколько, он тут нужен, в общем приложил: [vba]
Код
Sub PaintGrey() Dim xfind(), i& xfind = Array("более", "меньше", "не менее", "не более", "около") ... и ещё порядка 100 слов Selection.Find.ClearFormatting Options.DefaultHighlightColorIndex = wdRed Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Highlight = True ' подсветка For i = 0 To UBound(xfind) With Selection.Find .Text = xfind(i) ' текст для поиска .Replacement.Text = xfind(i) ' текст для замены .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = True .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll Next i End Sub
[/vba]
На всякий случай, вот пока весь список слов: ("более", "менее", "не более", "не менее", "наиболее", "наименее", "меньше", "больше", "не меньше", "не больше", "ниже", "выше", "не ниже", "не выше", "не хуже", "не лучше", "должен быть", "должна быть", "должно быть", "должны быть", "не должен быть", "не должна быть", "не должно быть", "не должны быть", "должен иметь", "должна иметь", "должно иметь", "должны иметь", "не должен иметь", "не должна иметь", "не должно иметь", "не должны иметь", "должен равняться", "должна равняться", "должно равняться", "должны равняться", "не должен равняться", "не должна равняться", "не должно равняться", "не должны равняться", "должен обеспечиваться", "должна обеспечиваться", "должно обеспечиваться", "должны обеспечиваться", "не должен обеспечиваться", "не должна обеспечиваться", "не должно обеспечиваться", "не должны обеспечиваться", "возможно", "вероятно", "примерно", "возле", "либо", "может", "в основном", "и другое", "в пределах", "ориентировочно", "до", "от", "возможно", "иным", "иные", "иной", "иная", "или", "или иным", "или иные", "или иной", "или иная", "или эквивалент", "или эквивалентно", "или эквивалентное", "или эквивалентны", "или эквивалентные", "или эквивалентных", "прочий", "прочая", "прочие", "около", "расположен около", "ориентировочно", "примерно", "приближающегося", "приблизительно")
Если, кто сможет помочь, буду очень признателен!
Есть множество документов в Excel пример приложил. Пытался сам разобраться, но так как мои познания в VBA стремятся к НУЛЮ))) ни чего не вышло. Цель вроде не сложна: Есть список слов (который должен быть в теле макроса, чтобы применить его можно было к любому документу) список периодически дополнятся. Так вот необходимо, что бы макрос находил по всему документу эти слова и выделял их ЦВЕТОМ - красным, только не шрифт делал красный, а именно цветовое выделение.
Есть пример кода для Word (делает тоже самое, что мне нужно и в Excel) - не знаю на сколько, он тут нужен, в общем приложил: [vba]
Код
Sub PaintGrey() Dim xfind(), i& xfind = Array("более", "меньше", "не менее", "не более", "около") ... и ещё порядка 100 слов Selection.Find.ClearFormatting Options.DefaultHighlightColorIndex = wdRed Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Highlight = True ' подсветка For i = 0 To UBound(xfind) With Selection.Find .Text = xfind(i) ' текст для поиска .Replacement.Text = xfind(i) ' текст для замены .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = True .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll Next i End Sub
[/vba]
На всякий случай, вот пока весь список слов: ("более", "менее", "не более", "не менее", "наиболее", "наименее", "меньше", "больше", "не меньше", "не больше", "ниже", "выше", "не ниже", "не выше", "не хуже", "не лучше", "должен быть", "должна быть", "должно быть", "должны быть", "не должен быть", "не должна быть", "не должно быть", "не должны быть", "должен иметь", "должна иметь", "должно иметь", "должны иметь", "не должен иметь", "не должна иметь", "не должно иметь", "не должны иметь", "должен равняться", "должна равняться", "должно равняться", "должны равняться", "не должен равняться", "не должна равняться", "не должно равняться", "не должны равняться", "должен обеспечиваться", "должна обеспечиваться", "должно обеспечиваться", "должны обеспечиваться", "не должен обеспечиваться", "не должна обеспечиваться", "не должно обеспечиваться", "не должны обеспечиваться", "возможно", "вероятно", "примерно", "возле", "либо", "может", "в основном", "и другое", "в пределах", "ориентировочно", "до", "от", "возможно", "иным", "иные", "иной", "иная", "или", "или иным", "или иные", "или иной", "или иная", "или эквивалент", "или эквивалентно", "или эквивалентное", "или эквивалентны", "или эквивалентные", "или эквивалентных", "прочий", "прочая", "прочие", "около", "расположен около", "ориентировочно", "примерно", "приближающегося", "приблизительно")
Если, кто сможет помочь, буду очень признателен!svoyak
buchlotnik, Да, наверное вы правы... Но точно знаю, что выделение шрифтом работает! Может подскажите тогда в этом направлении? Найти нужные слова и допустим (поменять цвет шрифта + увеличить размер + сделать жирным и т.д. желательно всё вместе), чтобы сотрудник точно не пропустил его.
buchlotnik, Да, наверное вы правы... Но точно знаю, что выделение шрифтом работает! Может подскажите тогда в этом направлении? Найти нужные слова и допустим (поменять цвет шрифта + увеличить размер + сделать жирным и т.д. желательно всё вместе), чтобы сотрудник точно не пропустил его.svoyak
Найти нужные слова и допустим (поменять цвет шрифта + увеличить размер + сделать жирным и т.д. желательно всё вместе), чтобы сотрудник точно не пропустил его.
Находите слова, например с помощью регулярных выражений, и с помощью iCell.Characters меняете цвет, размер, делаете шрифт жирным и т.д.
Цитата
Найти нужные слова и допустим (поменять цвет шрифта + увеличить размер + сделать жирным и т.д. желательно всё вместе), чтобы сотрудник точно не пропустил его.
Находите слова, например с помощью регулярных выражений, и с помощью iCell.Characters меняете цвет, размер, делаете шрифт жирным и т.д.Kuzmich
Sub check() On Error Resume Next If Selection.Cells.Count > 1 Then Set Rng1 = Selection.SpecialCells(xlCellTypeConstants) Else Set Rng1 = Selection End If
k = [m].End(xlDown).Row
Dim Rng2() ReDim Rng2(1 To k) For i = 1 To k Rng2(i) = [m].Offset(i - 1, 0) Next i
For Each cell In Rng1 If (Not IsEmpty(cell)) And (Not IsError(cell)) Then For i = 1 To Len(cell) For j = 1 To k If Mid(cell, i, Len(Rng2(j))) = Rng2(j) Then With cell.Characters(Start:=i, Length:=Len(Rng2(j))).Font .ColorIndex = 3 .Size = 14 .Bold = True End With Exit For End If Next j Next i End If Next cell End Sub
[/vba]
Цитата
с помощью регулярных выражений
Kuzmich, а можно поподробнее - как с помощью регулярок номер символа получить для Characters?
Как-то так навскидку
[vba]
Код
Sub check() On Error Resume Next If Selection.Cells.Count > 1 Then Set Rng1 = Selection.SpecialCells(xlCellTypeConstants) Else Set Rng1 = Selection End If
k = [m].End(xlDown).Row
Dim Rng2() ReDim Rng2(1 To k) For i = 1 To k Rng2(i) = [m].Offset(i - 1, 0) Next i
For Each cell In Rng1 If (Not IsEmpty(cell)) And (Not IsError(cell)) Then For i = 1 To Len(cell) For j = 1 To k If Mid(cell, i, Len(Rng2(j))) = Rng2(j) Then With cell.Characters(Start:=i, Length:=Len(Rng2(j))).Font .ColorIndex = 3 .Size = 14 .Bold = True End With Exit For End If Next j Next i End If Next cell End Sub
[/vba]
Цитата
с помощью регулярных выражений
Kuzmich, а можно поподробнее - как с помощью регулярок номер символа получить для Characters?buchlotnik
Sub ertert() Dim bibl, b, poisk As Range, r As Range Dim i As Long, l As Long
bibl = Array("более", "менее", "не более", "не менее", "наиболее", "наименее", "меньше", "больше", "не меньше", "не больше", _ "ниже", "выше", "не ниже", "не выше", "не хуже", "не лучше", "должен быть", "должна быть", "должно быть", _ "должны быть", "не должен быть", "не должна быть", "не должно быть", "не должны быть", "должен иметь", "должна иметь", _ "должно иметь", "должны иметь", "не должен иметь", "не должна иметь", "не должно иметь", "не должны иметь", "должен равняться", _ "должна равняться", "должно равняться", "должны равняться", "не должен равняться", "не должна равняться", _ "не должно равняться", "не должны равняться", "должен обеспечиваться", "должна обеспечиваться", _ "должно обеспечиваться", "должны обеспечиваться", "не должен обеспечиваться", "не должна обеспечиваться", _ "не должно обеспечиваться", "не должны обеспечиваться", "возможно", "вероятно", "примерно") Set poisk = Range([b3], Cells(Rows.Count, 2).End(xlUp)) poisk.Font.ColorIndex = xlAutomatic
With CreateObject("VBScript.RegExp") .Global = True: .IgnoreCase = True For Each b In bibl .Pattern = b: l = Len(b) For Each r In poisk.Cells If .Test(r) Then With .Execute(r) For i = 0 To .Count - 1 r.Characters(.Item(i).FirstIndex + 1, l + 1).Font.Color = vbRed Next End With End If Next r Next b End With End Sub
[/vba]
[p.s.]Наверное, лучше использовать Instr[/p.s.]
так вроде тоже работает
[vba]
Код
Sub ertert() Dim bibl, b, poisk As Range, r As Range Dim i As Long, l As Long
bibl = Array("более", "менее", "не более", "не менее", "наиболее", "наименее", "меньше", "больше", "не меньше", "не больше", _ "ниже", "выше", "не ниже", "не выше", "не хуже", "не лучше", "должен быть", "должна быть", "должно быть", _ "должны быть", "не должен быть", "не должна быть", "не должно быть", "не должны быть", "должен иметь", "должна иметь", _ "должно иметь", "должны иметь", "не должен иметь", "не должна иметь", "не должно иметь", "не должны иметь", "должен равняться", _ "должна равняться", "должно равняться", "должны равняться", "не должен равняться", "не должна равняться", _ "не должно равняться", "не должны равняться", "должен обеспечиваться", "должна обеспечиваться", _ "должно обеспечиваться", "должны обеспечиваться", "не должен обеспечиваться", "не должна обеспечиваться", _ "не должно обеспечиваться", "не должны обеспечиваться", "возможно", "вероятно", "примерно") Set poisk = Range([b3], Cells(Rows.Count, 2).End(xlUp)) poisk.Font.ColorIndex = xlAutomatic
With CreateObject("VBScript.RegExp") .Global = True: .IgnoreCase = True For Each b In bibl .Pattern = b: l = Len(b) For Each r In poisk.Cells If .Test(r) Then With .Execute(r) For i = 0 To .Count - 1 r.Characters(.Item(i).FirstIndex + 1, l + 1).Font.Color = vbRed Next End With End If Next r Next b End With End Sub
[/vba]
[p.s.]Наверное, лучше использовать Instr[/p.s.]nilem
Протёр от пыли, подкрутил. Запустите файл svoyak Тест Словаря РаскраскИ.xlsm Выделите ячейки. Нажимет кнопку Пуск. Выберите файл СловарьРаскраска.xlsx
[vba]
Код
Sub ЦветТекстаПоСловарю_РасКраска_InExSu() Dim shDC As Worksheet Dim iStart As Integer Dim rng As Range, cell As Range, sSearchString As String, lastRow&, i& Set shW = ActiveSheet Set rng = Selection ТочкаВозврата = rng.Address dicFile = Application.GetOpenFilename("Excel Workbooks (*.xls*), *.xls*", , , , False) Workbooks.Open Filename:=dicFile Set shDC = ActiveWorkbook.Worksheets("СловарьРаскраска") With shDC.UsedRange lastRow = .Row + .Rows.count - 1 End With For i = 1 To lastRow With shDC.Range("A" & i) Font_Color = .Font.color Interior_Color = .Interior.color End With sSearchString = shDC.Range("A" & i).Value shW.Activate For Each cell In rng If cell Like "*" & sSearchString & "*" Then iStart = InStr(cell.Value, sSearchString) cell.Characters(Start:=iStart, Length:=Len(sSearchString)).Font.color = Font_Color cell.Interior.color = Interior_Color End If Next Next Range(ТочкаВозврата).Select End Sub
Протёр от пыли, подкрутил. Запустите файл svoyak Тест Словаря РаскраскИ.xlsm Выделите ячейки. Нажимет кнопку Пуск. Выберите файл СловарьРаскраска.xlsx
[vba]
Код
Sub ЦветТекстаПоСловарю_РасКраска_InExSu() Dim shDC As Worksheet Dim iStart As Integer Dim rng As Range, cell As Range, sSearchString As String, lastRow&, i& Set shW = ActiveSheet Set rng = Selection ТочкаВозврата = rng.Address dicFile = Application.GetOpenFilename("Excel Workbooks (*.xls*), *.xls*", , , , False) Workbooks.Open Filename:=dicFile Set shDC = ActiveWorkbook.Worksheets("СловарьРаскраска") With shDC.UsedRange lastRow = .Row + .Rows.count - 1 End With For i = 1 To lastRow With shDC.Range("A" & i) Font_Color = .Font.color Interior_Color = .Interior.color End With sSearchString = shDC.Range("A" & i).Value shW.Activate For Each cell In rng If cell Like "*" & sSearchString & "*" Then iStart = InStr(cell.Value, sSearchString) cell.Characters(Start:=iStart, Length:=Len(sSearchString)).Font.color = Font_Color cell.Interior.color = Interior_Color End If Next Next Range(ТочкаВозврата).Select End Sub
Всем спасибо, выбрал для себя вариант наиболее приемлемый на данный момент. Этот - nilem, Всё как я хотел, но не хватает увлечения размера шрифта, как в примере - buchlotnik...
buchlotnik, Этот вариант тоже хороший, но постоянно создавать 2-й лист словарь отнимает время, которого и так мало у наших менеджеров. В любом случае спасибо за помощь!
InExSu, Ваш вариант к сожалению не открывается, возможно из-за старой версии или не пойму почему... В ближайшем будущем планируем обновить софт, тогда испробую ваш вариант. Спасибо!
Всем спасибо, выбрал для себя вариант наиболее приемлемый на данный момент. Этот - nilem, Всё как я хотел, но не хватает увлечения размера шрифта, как в примере - buchlotnik...
buchlotnik, Этот вариант тоже хороший, но постоянно создавать 2-й лист словарь отнимает время, которого и так мало у наших менеджеров. В любом случае спасибо за помощь!
InExSu, Ваш вариант к сожалению не открывается, возможно из-за старой версии или не пойму почему... В ближайшем будущем планируем обновить софт, тогда испробую ваш вариант. Спасибо!svoyak