Добрый вечер, уважаемые специалисты по VBA. Помогите решить непростую проблему.
Есть определенный текст, вписанный на лист экселя - построчно. Между абзацами этого текста - есть пустые строки. Как макросом - подсвечивать ключевые слова соответствующего диапазона - если границы этого диапазона - соответствуют названиям заголовков столбцов ?
То есть - если - в начале и в конце определенного абзаца - поставить текст (код1),(-код1) - то в тексте этого абзаца - будут подсвечиваться слова вписанные в столбец1. А если - в начале и в конце другого абзаца - поставить текст (код2),(-код2) - то в тексте этого конкретного абзаца - будут подсвечиваться слова вписанные в столбец2.
Добрый вечер, уважаемые специалисты по VBA. Помогите решить непростую проблему.
Есть определенный текст, вписанный на лист экселя - построчно. Между абзацами этого текста - есть пустые строки. Как макросом - подсвечивать ключевые слова соответствующего диапазона - если границы этого диапазона - соответствуют названиям заголовков столбцов ?
То есть - если - в начале и в конце определенного абзаца - поставить текст (код1),(-код1) - то в тексте этого абзаца - будут подсвечиваться слова вписанные в столбец1. А если - в начале и в конце другого абзаца - поставить текст (код2),(-код2) - то в тексте этого конкретного абзаца - будут подсвечиваться слова вписанные в столбец2.mv6677
Как макросом - подсвечивать ключевые слова соответствующего диапазона
Сделал пользовательскую функцию: [vba]
Код
Function ColoringWordsByList(RangeToColoring As Range, TegName$, ListRange, Optional ColorExampleCell As Range) As Long Dim dic As Object, i&, ii&, n&, t&, tt&, RangeToColoringARR, ListRangeArr, b As Boolean Dim columnTeg&, columnText&, tRangeToColoring As Range Application.Volatile If ColorExampleCell Is Nothing Then ColorN = -16776961 Else ColorN = ColorExampleCell.Font.Color If TypeName(ListRange) = "Range" Then ListRangeArr = ListRange.Value If TypeName(ListRangeArr) = "String" Then ReDim ListRangeArr(1 To 1, 1 To 1): ListRangeArr(1, 1) = ListRange.Value RangeToColoringARR = RangeToColoring.Value For i = 1 To UBound(RangeToColoringARR) For ii = 1 To UBound(RangeToColoringARR, 2) If b Then For t = 1 To UBound(ListRangeArr) For tt = 1 To UBound(ListRangeArr, 2) If Len(ListRangeArr(t, tt)) Then n = InStr(1, RangeToColoringARR(i, ii), ListRangeArr(t, tt)) Else n = 0 Do While n > 0 Set tRangeToColoring = RangeToColoring(i, ii) tRangeToColoring.Characters(Start:=n, Length:=Len(ListRangeArr(t, tt))).Font.Color = ColorN n = InStr(n + 1, RangeToColoringARR(i, ii), ListRangeArr(t, tt)) ColoringWordsByList = ColoringWordsByList + 1 Loop Next Next b = InStr(1, RangeToColoringARR(i, ii), "(-" & TegName & ")") = 0 Else b = InStr(1, RangeToColoringARR(i, ii), "(" & TegName & ")") > 0 End If Next Next End Function
[/vba]
Она красит слова по критериям + считает количество слов, которые нужно подкрасила. Для каждого тега - нужна отдельная формула - см. зеленые ячейки. Цвет закраски слов - берется из донорской ячейки(в данном случае с цветов ячеек с тегами) Функцию сделал волатильной - после изменения цвета - можно нажать F9 - слова перекрасятся.
Как макросом - подсвечивать ключевые слова соответствующего диапазона
Сделал пользовательскую функцию: [vba]
Код
Function ColoringWordsByList(RangeToColoring As Range, TegName$, ListRange, Optional ColorExampleCell As Range) As Long Dim dic As Object, i&, ii&, n&, t&, tt&, RangeToColoringARR, ListRangeArr, b As Boolean Dim columnTeg&, columnText&, tRangeToColoring As Range Application.Volatile If ColorExampleCell Is Nothing Then ColorN = -16776961 Else ColorN = ColorExampleCell.Font.Color If TypeName(ListRange) = "Range" Then ListRangeArr = ListRange.Value If TypeName(ListRangeArr) = "String" Then ReDim ListRangeArr(1 To 1, 1 To 1): ListRangeArr(1, 1) = ListRange.Value RangeToColoringARR = RangeToColoring.Value For i = 1 To UBound(RangeToColoringARR) For ii = 1 To UBound(RangeToColoringARR, 2) If b Then For t = 1 To UBound(ListRangeArr) For tt = 1 To UBound(ListRangeArr, 2) If Len(ListRangeArr(t, tt)) Then n = InStr(1, RangeToColoringARR(i, ii), ListRangeArr(t, tt)) Else n = 0 Do While n > 0 Set tRangeToColoring = RangeToColoring(i, ii) tRangeToColoring.Characters(Start:=n, Length:=Len(ListRangeArr(t, tt))).Font.Color = ColorN n = InStr(n + 1, RangeToColoringARR(i, ii), ListRangeArr(t, tt)) ColoringWordsByList = ColoringWordsByList + 1 Loop Next Next b = InStr(1, RangeToColoringARR(i, ii), "(-" & TegName & ")") = 0 Else b = InStr(1, RangeToColoringARR(i, ii), "(" & TegName & ")") > 0 End If Next Next End Function
[/vba]
Она красит слова по критериям + считает количество слов, которые нужно подкрасила. Для каждого тега - нужна отдельная формула - см. зеленые ячейки. Цвет закраски слов - берется из донорской ячейки(в данном случае с цветов ячеек с тегами) Функцию сделал волатильной - после изменения цвета - можно нажать F9 - слова перекрасятся.SLAVICK