With OpenRange.Find
.Clear Formatting
.Text = "pogosticks"
.Execute
End With
Для свойств, значения которых явно вы задать не можете, объект Find выбирает параметры, использованные последними или те, которые в настоящий момент заданы в диалоговом окне Найти и заменить программы Word. Именно по этой причине вам всегда следует включать метод Clear Formatting перед началом нового поиска- он позволяет убрать все ранее определенные для проведения поиска параметры форматирования.
Основная работа метода 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, предназначенный для контроля за тем, будут ли заменены все обнаруженные экземпляры обнаруженного фрагмента текста, или только первый.
Для поиска текста с определенным форматированием используйте свойства объекта Find, касающиеся форматирования. Они идентичны свойствам, используемым при работе с форматированием диапазона или выделенной области, как я уже отмечал в разделе "Форматирование текста", раньше в настоящей главе. Вы можете использовать те же свойства объекта Replacement, если хотите указать форматирование для замещающего текста.
Для поиска любого текста с определенным форматированием задайте соответствующие свойства объекта Find, а также задайте свойство Text равным пустой строке, используя пару кавычек. Для изменения форматирования найденного текста без влияния на сам текст, используйте пустую строку в качестве значения свойства Text объекта Replacement.
Приведенный ниже код проводит поиск абзацев, которым в данный момент назначен стиль Drab, после чего назначает им стиль Frilly:
With Selection.Find
.ClearFormatting
.Style = "Drab"
.Text = ""
With .Replacement
ClearFormatting
.Style •= "Drilly"
.Text = ""
End With
.Execute Replace := wdReplaceAll
.ClearFormatting
.Replacement.ClearFormatting
End With
Включение двух инструкций ля "очистки формата" в вашу процедуру после метода Execute - очень неплохая идея. В противном случае, когда пользователь в следующий раз прибегнет к диалоговому окну Найти и заменить, ему придется сбрасывать все параметры форматирования вручную.
Отличаясь от остальных приложений Office, Word позволяет определять в вашем коде специальные переменные документа, которые сохраняются вместе с документом. Переменные документа позволяют сохранять используемые процедурой значения между сеансами редактирования.
Переменные документа создаются и используются как члены коллекции Variables в данном документе. Как и обычные документы, переменные документа характеризуются именами. Приведенная ниже инструкция присваивает значение переменной Henry обычной переменной FriendOf Anais;
FriendOfAnais = _
ActiveDocument.Variable("Henry").Value
Для создания новой переменной документа используется метод Add коллекции Variables, как показано ниже:
Documents("Documentl").Variables.Add _
Name := "TimeThisMacroHasRun", Value := 0