Word VBA Макросы: Найти и выделить ФОНОМ несколько искомых слов.

Автор Daikiny, 09 апреля 2019, 03:46

Daikiny

Пытаюсь написать макрос, чтобы в тексте документа определенные слова, где бы они не встретились, выделялись ФОНОВЫМ цветом (желтым).
Причем слов много!

Записала примерный макрос  - он не работает.
Точнее если просить выделить несколько слов, то они выделяются, а вот так много слов сразу в тексте не ищутся.

Макрос
Sub Макрос1()

    Options.DefaultHighlightColorIndex = wdYellow
    With ActiveDocument.Range.Find
        .Text = "цена"
        .Text = "флэт"
        .Text = "atr"
        .Text = "rsi"
        .Text = "AUDUSD"
        .Text = "CNH"
        .Text = "Heiken Ashi"
        .Text = "RUB"
        .Text = "вопрос"
        .Text = "USDJPY"
        .Text = "USDMXN"
        .Text = "австралийск"
        .Text = "автомат"
        .Text = "безубыток"
        .Text = "беспроигрыш"
        .Text = "бинарны"
        .Text = "биткоин"
        .Text = "болли"
        .Text = "брокер"
        .Text = "бэк"
        .Text = ""валют
        .Text = "ванильн"
        .Text = "вебинар"
        .Text = "верш"
        .Text = "внутрен"
        .Text = "внутри"
        .Text = "волатильност"
        .Text = "вход"
        .Text = "вымпел"
        .Text = "выход"
        .Text = "гармониче"
        .Text = "геп"
        .Text = "граал"
        .Text = "график"
        .Text = "графич"
        .Text = "гэп"
        .Text = "двойн"
        .Text = "демо"
        .Text = "дивергенци"
        .Text = "дно"
        .Text = "додж"
        .Text = "закрыт"
        .Text = "излишн"
        .Text = "инвест"
        .Text = "индикатор"
        .Text = "интуиц"
        .Text = "йен"
        .Text = "кален"
        .Text = "календар"
        .Text = "капитал"
        .Text = "кластер"
        .Text = "книг"
        .Text = "коррел"
        .Text = "ликвиднос"
        .Text = "лини"
        .Text = "литератур"
        .Text = "локирован"
        .Text = "лот"
        .Text = "мани менедж"
        .Text = "мартинг"
        .Text = "мексик"
        .Text = "модел"
        .Text = "моделирова"
        .Text = "мувинг"
        .Text = "наход"
        .Text = "нахож"
        .Text = "начинающ"
        .Text = "нович"
        .Text = "новост"
        .Text = "обучен"
        .Text = "объем"
        .Text = "определен"
        .Text = "оптимизац"
        .Text = "опцион"
        .Text = "ордер"
        .Text = "осциллятор"
        .Text = "отложен"
        .Text = "песо"
        .Text = "пин-бар"
        .Text = "план"
        .Text = "плечо"
        .Text = "поглощен"
        .Text = «пин»
        .Text = "поддержк"
        .Text = "портфел"
        .Text = "прайс"
        .Text = "предложен"
        .Text = "прибыльн"
        .Text = "проби"
        .Text = "пробо"
        .Text = "проскал"
        .Text = "против"
        .Text = "прямоугол"
        .Text = "психолог"
        .Text = "пункт"
        .Text = "разработ"
        .Text = "риск"
        .Text = "рубл"
        .Text = "ручн"
        .Text = "свеч"
        .Text = "своп"
        .Text = "семинар"
        .Text = "сесси"
        .Text = "систем"
        .Text = "скольз"
        .Text = "скользящ"
        .Text = "советник"
        .Text = "сопротивлен"
        .Text = "спред"
        .Text = "спрос"
        .Text = "спрэд"
        .Text = "стоп"
        .Text = "стратег"
        .Text = "счет"
        .Text = "таймфрейм"
        .Text = "тест"
        .Text = "техническ"
        .Text = "точност"
        .Text = "трал"
        .Text = "трей"
        .Text = "трейлинг"
        .Text = "тренд"
        .Text = "треугол"
        .Text = "уровен"
        .Text = "уровн"
        .Text = "учеб"
        .Text = "учит"
        .Text = "фибо"
        .Text = "флаг"
        .Text = "форекс"
        .Text = "фрактал"
        .Text = "фундам"
        .Text = "фундамент"
        .Text = "хеджиров"
        .Text = "чек лист"
        .Text = "черепах"
        .Text = "чрезмер"
        .Text = "экономич"
        .Text = "эксперац"
        .Text = "элиот"
        .Text = "эмоци"
        .Text = "юан"
        .Text = "японск"
        .Text = "этапы"
        .Text = "исторические данные"
        .Text = "истори"
        .Text = "сделк"
        .Text = "проигр"
        .Text = "фрактал"
        .Text = "ганн"
        .Text = "тест"
        .Replacement.Highlight = True
        .Format = True
        .Execute Replace:=wdReplaceAll
    End With
   
End Sub
[свернуть]

Администратор

Я в макросе указал только два слова, вы запишите остальные по аналогии. Для этого:
1) здесь в скобках укажите вместо числа 2 количество искомых слов:
Dim SearchWords(2)
2) в пункт 1 допишите остальные слова по аналогии.

Но столько слов писать в код макроса неудобно. Поэтому слова макрос может брать из ворд-файла, из эксель-файла, из текстового файла. Юзер будет записывать слова в файл, макрос откроет этот файл, извлечёт из него слова, закроет файл и закрасит слова.

Макрос
Sub Макрос()
   
    ' Создаём в оперативной памяти компьютера массив с двумя элементами.
    Dim SearchWords(2)
    Dim i As Long
   
   
    '1. Записываем в массив 'SearchWords' искомые слова.
    SearchWords(1) = "цена"
    SearchWords(2) = "флэт"
   
    '2. Поиск и закраска искомых слов.
   
    '1) Настройка цвета.
    Options.DefaultHighlightColorIndex = wdYellow
   
    '2) Просматриваем элементы массива 'SearchWords'.
    For i = 1 To UBound(SearchWords)
       
        ' Поиск и замена.
        With ActiveDocument.Range.Find
            ' В параметр 'Text' подставляем текущий элемент массива.
            .Text = SearchWords(i)
            .Replacement.Highlight = True
            .Execute Replace:=wdReplaceAll
        End With
   
    Next i
   
    ' Сообщение.
    MsgBox "Готово.", vbInformation
   
End Sub
[свернуть]

В самый верх модуля вставьте это, я макрос сделал под эти установки:
Option Explicit
Option Compare Text
Option Base 1

Daikiny