Word vba выделить найденный текст

title ms.prod ms.assetid ms.date ms.localizationpriority

Finding and Replacing Text or Formatting

word

9ab9f4a7-9833-5a78-56b0-56a161480f18

06/08/2019

medium

Finding and replacing is exposed by the Find and Replacement objects. The Find object is available from the Selection object and the Range object. The find action differs slightly depending upon whether you access the Find object from the Selection object or the Range object.

Finding text and selecting it

If the Find object is accessed from the Selection object, the selection is changed when the find criteria is found. The following example selects the next occurrence of the word «Hello.» If the end of the document is reached before the word «Hello» is found, the search is stopped.

With Selection.Find 
 .Forward = True 
 .Wrap = wdFindStop 
 .Text = "Hello" 
 .Execute 
End With

The Find object includes properties that relate to the options in the Find and Replace dialog box. You can set the individual properties of the Find object or use arguments with the Execute method, as shown in the following example.

Selection.Find.Execute FindText:="Hello", _ 
 Forward:=True, Wrap:=wdFindStop

Finding text without changing the selection

If the Find object is accessed from a Range object, the selection is not changed but the Range is redefined when the find criteria is found. The following example locates the first occurrence of the word «blue» in the active document. If the find operation is successful, the range is redefined and bold formatting is applied to the word «blue.»

With ActiveDocument.Content.Find 
 .Text = "blue" 
 .Forward = True 
 .Execute 
 If .Found = True Then .Parent.Bold = True 
End With

The following example performs the same result as the previous example, using arguments of the Execute method.

Set myRange = ActiveDocument.Content 
myRange.Find.Execute FindText:="blue", Forward:=True 
If myRange.Find.Found = True Then myRange.Bold = True

Using the Replacement object

The Replacement object represents the replace criteria for a find and replace operation. The properties and methods of the Replacement object correspond to the options in the Find and Replace dialog box (Edit menu).

The Replacement object is available from the Find object. The following example replaces all occurrences of the word «hi» with «hello». The selection changes when the find criteria is found because the Find object is accessed from the Selection object.

With Selection.Find 
 .ClearFormatting 
 .Text = "hi" 
 .Replacement.ClearFormatting 
 .Replacement.Text = "hello" 
 .Execute Replace:=wdReplaceAll, Forward:=True, _ 
 Wrap:=wdFindContinue 
End With

The following example removes bold formatting in the active document. The Bold property is True for the Find object and False for the Replacement object. To find and replace formatting, set the find and replace text to empty strings («») and set the Format argument of the Execute method to True. The selection remains unchanged because the Find object is accessed from a Range object (the Content property returns a Range object).

With ActiveDocument.Content.Find 
 .ClearFormatting 
 .Font.Bold = True 
 With .Replacement 
 .ClearFormatting 
 .Font.Bold = False 
 End With 
 .Execute FindText:="", ReplaceWith:="", _ 
 Format:=True, Replace:=wdReplaceAll 
End With

[!includeSupport and feedback]

Окошко «Найти и заменить» в Microsoft Word может мазать все найденное желтеньким, но это не имеет отношения к выделению текста (и VBA может). А если искать с выделением (Selection.Find), то нахождение каждого следующего вхождения снимает выделение с предыдущего.

Поэтому для простаты надо искать в цикле (Do While True в самый раз). Вот пример куска кода, который находит весь текст со стилем foo и записывает его в переменную для дальнейшей эксплуатации.

Selection.HomeKey Unit:=wdStory
Selection.Collapse
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("foo")
Do While Selection.Find.Execute(FindText:="") = True
    bar = Selection.Text
Loop

В таком цикле не стоит использовать привычный параметр Wrap:=wdFindContinue, потому что все зарекурсится и ворд перестанет отвечать. Поэтому Selection.HomeKey Unit:=wdStory, чтобы сдвинуть выделение в начало документа.

Ярлыки: Microsoft Word, MS Word macro, VBA


Ближайшие сообщения

Похожие сообщения

Sub макрос()

    ‘ Макрос ищет в основном тексте (в колонтитулах и другом не ищет).

    Dim phrases, sbornik()
    Dim pars As Collection, ub2 As Long
    Dim counter As Long, max As Long
    Dim i As Long, j As Long

            ‘1. Юзер указывает, какие фразы надо искать.
    phrases = InputBox(«Введите искомые фразы через запятую:»)
    ‘ Если юзер щёлкнул «Cancel».
    If phrases = «» Then
        Exit Sub
    End If

        ‘2. Откл. монитора (может это ускорит макрос и чтобы не мерцало).
    Application.ScreenUpdating = False

        ‘3. Разбивка введённого текста на части по запятой.
    phrases = Split(phrases, «,»)

        ‘4. Создание ячеек в массиве «sbornik». В нём создаётся столько строк,
        ‘ сколько абзацев. И столько столбцов, сколько искомых фраз.
        ‘ То есть в массиве для каждого абзаца будет своя строка.
    ReDim sbornik(1 To ActiveDocument.Paragraphs.Count, 1 To UBound(phrases) + 1)

        ‘5. Поиск.
    For i = 0 To UBound(phrases)
        find phrases(i), sbornik(), i + 1
    Next i

        ‘6. Определение, в каком абзаце находится больше всего разных искомых слов.
    ‘1) Определение, сколько максимально было найдено в одном любом абзаце.
    ub2 = UBound(sbornik, 2)
    For i = 1 To UBound(sbornik, 1)
        counter = 0
        For j = 1 To ub2
            If sbornik(i, j) = True Then
                counter = counter + 1
            End If
        Next j
        sbornik(i, 1) = counter
        If counter > max Then
            max = counter
        End If
    Next i

        ‘2) Если вообще не было найдено искомых фраз.
    If max = 0 Then
        Application.ScreenUpdating = True
        MsgBox «Искомые фразы не найдены.», vbExclamation
        Exit Sub
    End If

        ‘3) Определение, в каком абзаце находится больше всего разных искомых слов.
    Set pars = New Collection
    For i = 1 To UBound(sbornik, 1)
        If sbornik(i, 1) = max Then
            pars.Add Item:=i
        End If
    Next i

        ‘4) Закраска абзацев с максимальным кол-вом.
    For i = 1 To pars.Count
        ActiveDocument.Paragraphs(pars(i)).Shading.BackgroundPatternColor = -654246042
    Next i

        ‘7. Вкл. монитора.
    Application.ScreenUpdating = True

        ‘8. Сообщение.
    MsgBox «Готово.», vbInformation

End Sub

Private Sub find(phrase, sbornik(), PhraseIndex As Long)

    Dim find_rng As Range, find As find
    Dim index As Long

            ‘1. Создание объектов, которые будут искать.
    Set find_rng = ActiveDocument.Range(0, 0)
    Set find = find_rng.find

        ‘2. Настройка поиска.
    find.Text = phrase
    find.Wrap = wdFindStop

        ‘3. Поиск.
    Do While find.Execute = True

            ‘1) Закраска найденной фразы.
        find_rng.Font.ColorIndex = wdRed

                ‘2) Запись порядкового номера абзаца в переменную «index».
            ‘ В ворде нет готового инструмента для определения порядкового номера абзаца,
            ‘ поэтому используется обходной способ — подсчёт кол-ва абзацев от
            ‘ начала файла до заданного фрагмента. В нашем случае до найденного фрагмента,
            ‘ включая сам найденный фрагмент.
        index = ActiveDocument.Range(0, find_rng.End).Paragraphs.Count

                ‘3) Запись в массив «sbornik» в соответствующую строку и столбец слова «True».
        sbornik(index, PhraseIndex) = True

            Loop

    End Sub

[свернуть]

Условие: Написать макрос для Word, который запрашивает слово и выделяет его каким-либо образом в тексте.

Алгоритм: пробежаться по всем словам в тексте, и если слово совпадает с заданным- применить к нему некоторые изменения.

[code lang=»vb»]
Sub Выделение()
Dim Выделение As String
Выделение = InputBox(«Введите слово для выделения», «Выделяем слова»)
If Выделение = Empty Then Exit Sub
For Each i In ActiveDocument.Words()
With Selection.Find
.Text = Выделение
.Replacement.Text = «»
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
If Not Selection.Font.ColorIndex = wdBlue Then
Selection.Font.ColorIndex = wdBlue
Selection.MoveRight Unit:=wdWord, Count:=1
Else
MsgBox «Выделение закончено!»
Exit Sub
End If
Next i
End Sub
[/code]

Получается такое: говорим пользователю, а введи-ка нам слово для поиска. А он и вводит. Это слово пишется в переменную, которая называется «Выделение«. Далее проверка. Если пользователь решил ничего не вбивать — выйти. А дальше основной цикл, с помощью которого перебираются все слова документа с текстом из переменной. Далее исполняем поиск по заданным параметрам и начинаем выделять слова.

В этом примере слова будут подсвечиваться синеньким. Соответственно условие гласит, если слово не выделено, то… Выделить его синим и перейти к следующему слову в коллекции.

Когда-то да не выделенные слова закончатся. И тогда вывести сообщение: Выделение закончено!

ВикиЧтение

VBA для чайников
Каммингс Стив

Работа с найденным текстом

Работа с найденным текстом

Основная работа метода Execute — обнаружение первого экземпляра искомого текста или форматирования в указанном диапазоне или выделенной области. После выполнения этого метода вам прежде всего следует определить, было ли найдено то, что вы ищете. Для подобной проверки используйте свойство Found объекта Find совместно с инструкцией If…Then, как показано на примере следующей заготовки программного кода:

If .Found = True Then

(выполнение определенных действий с найденным текстом)

Else

(отображение соответствующего сообщения)

End If

Если метол Execute нашел необходимый текст, исходный диапазон или выделенная область переопределяются таким образом, чтобы содержать найденный текст. Это очень важный момент, поскольку это означает, что вы можете работать с найденным текстом посредством свойств и методов исходного объекта. В следующем примере, представляющем собой расширенный вариант первого фрагмента кода из настоящего раздела, инструкция .Parent. Italic = True обращается к родительскому объекту по отношению к объекту Find, т.е. диапазону OpenRange. При выполнении этой инструкции диапазон OpenRange теперь содержит только найденный фрагмент текста, так как только в нем предусмотрено форматирование курсивом:

With OpenRange.Find

.СlearFormatting

.Text = «pogosticks»

If .Found = True Then

.Parent.Italic = True

Else

MsgBox «No pogosticks found.»

End If

End with

Объект Reolacement принадлежит (а значит, является его свойством) объекту Find. При написании кода для операции поиска и замены вам следует задать свойства и выполнить методы объекта Replacement.

Следующий фрагмент кода заменяет все экземпляры фразы pogosticks словом skateboards. Выделенная область изменяется при выполнении критерия поиска, поскольку доступ к объекту Find осуществляется через объект Selection:

With ActiveDocument.Content.Find

.ClearFormatting

.Text = «pogosticks»

With .Replacement

.ClearFormatting

.Text == «skateboards»

End With

.Execute Replace := wdReplaceAll

End With

Обратите внимание на то, что метод Execute может использовать аргумент Replace, предназначенный для контроля за тем, будут ли заменены все обнаруженные экземпляры обнаруженного фрагмента текста, или только первый.

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

Работа с текстом

Работа с текстом
pdf_showВывод текста в текущую позицию.Синтаксис:void pdf_show(int pdf_document, string text)Для вывода используются текущая позиция и текущий шрифт.pdf_show_boxedВывод текста в прямоугольную область.Синтаксис:void pdf_show_boxed(int pdf_document, string text, double x, double y, double width, double height, string mode [, string

Работа с текстом

Работа с текстом
В меню Текст практически не ничего нового.Надпись. Имеется в виду надпись как фигура. Мы сталкивались с ней, когда рассматривали Word. Позволяет вставить в слайд фигуру и что-нибудь в ней написать. После ее вставки появится меню Средства рисования. С ним вы

Глава 9 Работа с текстом

Глава 9
Работа с текстом
При работе с документами InDesign мы будем оперировать тремя основными категориями объектов:• собственно текстом;• объектами программы InDesign (то есть различными рамками, линиями, геометрическими фигурами и прочими элементами, которые умеет

Работа с текстом

Работа с текстом
В AutoCAD можно создавать текст двух видов:• команды DTEXT и TEXT позволяют сформировать однострочный текст;• с помощью команды MTEXT создается многострочный текст, представляющий собой текстовый блок, состоящий из произвольного количества строк и абзацев.

Работа с текстом

Работа с текстом
Нередко достаточно важно бывает уметь красиво оформлять текст. В данном уроке мы рассмотрим, каким образом можно создавать достаточно необычные буквы.Конечно же, помимо обычного присвоения эффектов, которые тоже могут оживить надписи, и даже задания

Глава 20 Работа с текстом

Глава 20
Работа с текстом
• Принципы работы с текстом• Настройки символов текста• Настройки абзацев текстаРабота с текстом во всех графических программах выглядит, в принципе, похоже: используются одни и те же настройки и в целом текст можно оформлять по одинаковым

Работа с текстом

Работа с текстом
Созданные средствами Photoshop текстовые надписи можно использовать в качестве поясняющих выносок или для оформления логотипов. С помощью инструментов группы Type (Текст) в проект добавляется надпись в виде отдельного слоя, который не является растровым.

15.2. Работа с текстом

15.2. Работа с текстом
OpenOffice.org Writer (он же Word Processor — так назывался текстовый процессор в ранних версиях OpenOffice) ничем не сложнее MS Word — даже комбинации клавиш те же (табл. 15.1).

В современных документах очень часто встречаются рисунки и таблицы. Практически ни один современный

6.7. Работа с текстом

6.7. Работа с текстом
Теперь мы разработаем простое приложение, которое будет способно выводить текст под различным углом через определенный интервал времени. Для этого опять сделаем обработку события OnPaint нашей формы, в которой будем осуществлять вывод некоторого текста

Работа с текстом

Работа с текстом
Говорят, что изображение стоит тысячи слов. Линии, дуги и круги на рисунке могут передать много графической информации, однако в конце работы вам нужно снабдить рисунки примечаниями, чтобы полностью передать замысел.Текст на рисунке соотносится с

Работа с текстом в таблицах

Работа с текстом в таблицах
Работа с текстом в ячейках таблицы включает в себя управление стилями и редактирование. Управление стилями опирается на стили рисунка и, в частности, на табличные стили. Стили таблицы предназначены для управления видом таблиц. Для отображения

Работа с текстом

Работа с текстом
В случае применения Photoshop для обработки изображений при последующем использовании их в научной работе необходимо научиться добавлять к изображению текст – различные надписи и выноски, с помощью которых можно как минимум поместить подпись под

3.1. Работа с текстом

3.1. Работа с текстом
OpenOffice.org Writer (он же Word Processor — так назывался текстовый процессор во второй версии OpenOffice) ничем не сложнее MS Word — даже комбинации клавиш те же (табл. П5.1).

В современных документах очень часто встречаются рисунки и таблицы. Практически ни один современный

Глава 9 Работа с текстом

Глава 9
Работа с текстом
? Набор текста.? Печать текстов.? Форматирование текстовых документов.? Вставка рисунков, таблиц и других

Глава 7 Работа с текстом

Глава 7
Работа с текстом
Текст? Но зачем графическому пакету поддерживать работу с текстом?Во-первых, часто бывает так, что лучше сказать пару слов, чем рисовать мегабайты хитроумной графики. Во-вторых, текст зачастую является составной частью изображения, как например

Понравилась статья? Поделить с друзьями:
  • Word vba word wrap
  • Word vba tables range
  • Word vba string find
  • Word vba selection words
  • Word vba selection expand