Vba word найти и выделить текст

Обновлено: 03.07.2024

В течение многих месяцев я безрезультатно искал код VBA, который я могу включить в свои макросы, чтобы выделить текст, используя текущий цвет выделения по умолчанию. Я просмотрел свои личные справочники и всю страну Google, в том числе и здесь.

У меня есть миллиард макросов, которые выделяют текст до воскресенья всеми возможными (основными) цветами, и все они отлично работают. Но иногда у меня есть сценарий, в котором я хочу выделить случайный текст постоянно, несколько раз, определенным цветом. Потом я захочу поменять цвета . на время. И снова переключаемся . ненадолго.

У меня есть сочетания клавиш (многие) для множества вариантов выделения, включая встроенное сочетание клавиш для выделения текста, который я выделил вручную. Так, например, я могу вручную выделить три слова слева от меня и использовать Ctrl + Alt + H для вызова встроенного выделения , и будет использовать текущий цвет по умолчанию.

Но я не могу автоматизировать это с помощью макроса. Например, я использовал множество различных итераций макросов для выделения текста, когда я его набираю, или для автоматического выделения X слов слева от меня, строки, предложения или абзаца. Но для каждого из этих макросов я вынужден объявить определенный цвет. Это означает, что мне нужно иметь объемную серию макросов, чтобы можно было делать то же самое с каждым (основным) цветовым вариантом. Это нормально, если я просто хочу изредка выделять текст определенным цветом. Но когда я знаю, что буду использовать определенный цвет для следующих, скажем, 20 или 40 бликов, я бы хотел установить цвет по умолчанию, а затем просто использовать общую команду выделения, а не команду, ориентированную на цвет (что больше шаги).

1 ответ

После долгих экспериментов я наконец нашел способ это сделать. Я не уверен, что это самый эффективный способ, но он работает!

У меня есть много макросов, ориентированных на подсветку, которые будут использовать эту функцию, но вот пример одного из них, использующего эту функцию. Я объявил существующий цвет как строку, а затем использовал строку, а не определенный цвет (что я ошибочно считал обязательным). Следующий макрос позволяет мне выделять, пока я печатаю:

Выполняет указанную операцию поиска. Возвращает True, если операция поиска будет успешной. Логическое значение.

Синтаксис

выражения. Выполнение (FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms , Forward , Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)

выражение (обязательно). Переменная, представляюная объект Find.

Параметры

Имя Обязательный или необязательный Тип данных Описание
FindText Необязательный Variant Текст, который необходимо искать. Используйте пустую строку ("") для поиска только форматирования. Вы можете искать специальные символы, указав соответствующие коды символов. Например, "^p" соответствует знаку абзаца, а "^t" соответствует символу вкладки.
MatchCase Необязательный Variant True, чтобы указать, что текст поиска должен быть чувствительным к делу. Соответствует контрольной окне "Совпадение" в диалоговом окне Найти и заменить (Изменить меню).
MatchWholeWord Необязательный Variant Правда, чтобы операция поиска найдите только целые слова, а не текст, который является частью более крупного слова. Соответствует диалоговой окне Найти целые слова только в диалоговом окне Найти и заменить.
MatchWildcards Необязательный Variant True to have the find text be a special search operator. Соответствует контрольной окне Use wildcards в диалоговом окне Найти и заменить.
MatchSoundsLike Необязательный Variant True, чтобы операция поиска найдите слова, которые звучат так же, как найти текст. Соответствует диалоговой окне "Звуки", как в диалоговом окне Найти и заменить.
MatchAllWordForms Необязательный Variant Правда, чтобы операция поиска найдите все формы текста поиска (например, "sit" находит "сидя" и "sat"). Соответствует поле Найти все формы слов в диалоговом окне Найти и заменить.
Forward Необязательный Variant True для поиска вперед (ближе к концу документа).
Wrap Необязательный Variant Контролирует, что происходит, если поиск начинается в точке, не в начале документа и в конце документа достигается (или наоборот, если форвард настроен на False). Этот аргумент также контролирует, что происходит, если есть выбор или диапазон и текст поиска не найден в выборе или диапазоне. Может быть одним из констант WdFindWrap.
Format Необязательный Variant Верно, что операция поиска находит форматирование в дополнение к тексту поиска или вместо него.
ReplaceWith Необязательный Variant Текст замены. Чтобы удалить текст, указанный аргументом Find, используйте пустую строку (""). Вы указываете специальные символы и расширенные критерии поиска так же, как и аргумент Find. Чтобы указать графический объект или другой нетекст в качестве замены, переместите элемент в буфер обмена и укажите "^c" для ReplaceWith.
Replace Необязательный Variant Указывает, сколько замен необходимо сделать: один, все или нет. Может быть любой константой WdReplace.
MatchKashida Необязательный Variant True, если поиск операций соответствует тексту с соответствием кашидам в документе на арабском языке. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной.
MatchDiacritics Необязательный Variant True, если поиск операций совпадает с текстом, соответствующим диакритикам в языковом документе справа налево. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной.
MatchAlefHamza Необязательный Variant True, если поиск операций совпадает с текстом, соответствующим хамзам alef в документе на арабском языке. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной.
MatchControl Необязательный Variant True, если поиск операций совпадает с текстом, соответствующим символам управления бидайрекционными в документе языка справа налево. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной.
MatchPrefix Необязательный Variant True, чтобы соответствовать словам, начиная со строки поиска. Соответствует префиксу Match в диалоговом окне Найти и заменить.
MatchSuffix Необязательный Variant True, чтобы соответствовать словам, завершаемой строкой поиска. Соответствует поле суффикса Match в диалоговом окне Найти и заменить.
MatchPhrase Необязательный Variant True игнорирует все символы белого пространства и управления между словами.
IgnoreSpace Необязательный Variant True игнорирует все пробелы между словами. Соответствует окне Игнорировать символы белого пространства в диалоговом окне Найти и заменить.
IgnorePunct Необязательный Variant True игнорирует все знаки препинания между словами. Соответствует контрольной окне Игнорировать пунктуацию в диалоговом окне Найти и заменить.

Возвращаемое значение

Примечания

Если MatchWildcards является true, можно указать символы подтекста и другие расширенные критерии поиска для аргумента FindText. Например, "*(ing)" находит любое слово, которое заканчивается в "ing".

Чтобы найти символ, введите caret (^), ноль (0), а затем код символа. Например, "^0151" соответствует em dash ( — ).

Если иное не указано, заменяющий текст наследует форматирование заменяемого в документе текста. Например, если заменить строку "abc" на "xyz", вхождения "abc" с жирным форматированием заменяются строкой "xyz" с жирным форматированием.

Кроме того, если MatchCase является false, вхождения верхнего текста поиска будут заменены на верхний шкаф версии заменяемого текста, независимо от случая замены текста. В предыдущем примере случаи "ABC" заменяются на XYZ.

Пример

В этом примере находит и выбирает следующее появление слова "библиотека".

В этом примере находятся все вхождения слова "привет" в активном документе и заменяется каждое событие на "привет".

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.


Нарисовать прямоугольник и залить его черным цветом
написал код рисуется прямоугольник и надо залить его черным цветом но у меня почему-то не.


Как залить Bitmap черным цветом
Сабж. Идиотский вопрос (как и решение), но не нашел ничего лучше, чем public static Bitmap.

Залить черным цветом определенные участки изображения
"Разработать программу обработки чёрно-белых BMP файлов. На вход программы подаются координаты.

Работа с MS WORD. Найти текст и заменить его на картинку.
Добрый день. В программа необходимо обратиться к вордовскому документу и заменить в нем некоторый.

Решение

Вау, здорово. Спасибо вам. Очень помогли.

Добавлено через 36 минут
А если не одно слово найти нужно? например еще слова: сборка и накладная

Добавлено через 2 минуты
или если их вообще много?

Это так-же легко, достаточно повторить всё с начала
тоесть сверху со сбросом параметров поиска

Добавлено через 1 минуту
Удивительно что вы на свой-же вопрос решили проснуться сегодня,
вообщето это было позавчера..

Добавлено через 39 секунд
я уже подумал что вы очередной фейк ))

Добавлено через 3 минуты
Я могу еще сказать что еще есть подстановочные знаки, но это наверное будет для вас сложно

Ну да. Можно повторить все сначала. Я так и сделала.
тут же на форуме нашла похожую задачу:

Тут можно повторить только две строки
.Text = "text"
.Replacement.Text = ""

Добавлено через 1 час 56 минут
что то у меня и с "повторить всё с начала
то есть сверху со сбросом параметров поиска" не получается. Выдает ошибку: End With Without With
Помогите пожалуйста

Решение

Позвольте вас еще помучить. У меня опять загвоздка.
У меня список слов такой большой, что не вмещается в окно VBA. Пыталась добавить доп. константу, но не получилось

Добавлено через 12 минут
Покажите что вы делаете

Решение

Если список слов может меняться, лучше хранить его не в коде, а в отдельном текстовом или вордовском файле.

Вот список:
Абдулкеримов
Абдулфазылов
Александрова
Алексанов
Алчинбаева
Арефин
Арефьев
Артемьев
Аюпова
Баргман
Беказиев
Белоус
Белоусов
Березин
Богомолов
Болтунов
Бораева
Ботвин
Бояркин
Бугаков
Бугакова
Василевский
Васильева
Вершинин
Владимирова
Волков
Гааг
Гавдис
Голышева
Гордейчук
Грачев
Дель
Дементьев
Дородников
Доценко
Дрюпин
Дудин
Дурнев
Елизаров
Задвинский
Ибрагимов
Иванов
Ивашов
Ивлева
Кадулина
Каледина
Камалова
Каменских
Карелин
Каруна
Касьянов
Кашуба
Кибирева
Коваленко
Козлов
Кокорев
Комягин
Кондаков
Кондратенко В
Королев
Королева
Кострикин
Котов
Крайнюкова
Краськова
Крей
Кремлева
Криницын
Круглов
Кудрин
Кудряшов
Кузнецова
Куликов
Кюрс
Латыпов
Лашманов
Лебедев
Леднев
Летавин
Лукин
Мажаров
Максимова
Манченко
Мешавкин
Молочников
Муравьева
Нахратов
Никандрова
Новоселов
Оборотов
Обрядина
Орлов
Павлов
Панкратов
Пашугин
Перепеча
Петросян
Плешков
Погонцев
Подобная
Полякова
Пономарев
Попов
Попова
Потапов
Потапова
Приходько
Прищемихина
Провоторова
Проселкова
Пузаков
Пуртов
Пучкова
Ревина
Рибчинчук
Рогозовец
Романова
Рублева
Русакова
Рыбин
Рыжова
Рыскаль
Рябцов
Савиновский
Салеева
Седых
Семеновых
Сивенко
Силаков
Синдяев
Смирнов
Советова
Сокова
Соловьев А
Стариков
Студенкова
Сунцов
Татьков
Тахтин
Телешева
Трегубова
Трусь
Фаезов
Фардиев
Федорова
Федосова
Фетисов
Фоменко
Фомин
Фролов
Хажеев
Хохлов
Хромова
Цветкова
Целищева
Чекалов
Чепурченко
Чернцова
Чернявский
Черняев
Черняк
Чижов
Шаула
Шестаков
Шигонцева
Штреккер
Шупило
Юдина
Яковлев
Яковлева
Ялынко
Ямщиков
Ясенков
Храмов
Гурьянов
Муравьёва
Медведев
Волков
Кабиров
Манченко
Хуснутдинова

Добавлено через 1 минуту
Если есть такая фамилия (или несколько разных) в тексте, ее необходимо выделить черной заливкой (и соответственно текст шрифта белый)

Поиск слов такого типа <* слово , .*> и замена их на другие слова средствами Word-VBA
Есть кнопка в документе,при открытии появляется форма где видно несколько полей,куда нужно вписать.

Можно ли создать подобие формулы в документе Word средствами VBA?
На скрине пример документа, где всегда значения в тексте должны быть равны значениям в таблице.

Word: макрос, подсчитывающий количество слов в документе
Помогите создать макрос, посчитывающий количество слов в документе!

Нужно использовать метод Find.
Метод Find используется с объектом Selection, Range и Content.
При использовании метода Find, в оперативной памяти компьютера создаётся объект, который состоит из нескольких членов.
При использовании Find с Selection объект сохраняется в оперативной памяти до тех пор, пока работает программа Word. Кроме того, результат такого поиска отображается в диалоговом окне Найти и заменить.
В остальных случаях создаётся временный объект, который находится в оперативной памяти только когда код проходит через строки:

В связи с этим можно и код писать по-разному для разных случаев.

Ниже приведены коды, которые находят слово text и делают его жирным.

Код с Content (в данном коде Content можно заменить Range): Спасибо то что надо
И еще один вопрос, немного не в тему - что за объект такой Content и чем он отличается от Range ? что за объект такой Content и чем он отличается от Range ?
  1. колонтитулы,
  2. сноски,
  3. надписи,
  4. собственно документ.
что означает диапазон документа от начала и до десятого знака включительно. Если ничего не указано:

то означает - весь документ. Т.е. в данном случае Range, то же самое, что Content (хотя может разница и есть в чём-то).

В остальных случаях (когда Range не относится к Documents (Activedocument), Range является свойством и с помощью него узнают порядковый номер символа (но там путаница большая, если используются в документе кроме символов другие объекты (например, рисунки)) и содержимое объекта (например, абзаца):

Читайте также: