Шрифт:
Вот что получилось:
Параметры поиска • Записанный фрагмент кода
Вперед, с согласием на продолжение поиска •
Forward = True
Wrap = wdFindAsk
Назад, с согласием на продолжение поиска
Forward = False
Wrap = wdFindAsk
Вперед, без согласия на продолжение поиска
Forward = True
Wrap = wdFindAsk
Назад, без согласия на продолжение поиска
Forward = False
Wrap = wdFindAsk
Везде
Forward = True
Wrap = wdFindContinue
Видно, что наличие или отсутствие согласия на продолжение поиска, даваемое в выскакивающем запросе, не влияет на записываемый текст. А как же тогда отказаться от этого запроса на продолжение — ведь в готовой программе он явно неуместен? Откроем текст макроса и поставим после команды".Wrap" еще один знак "=" (рис. 5.15). Выпал список возможных продолжений.
Рис. 5.15. Вот так можно определить возможные значения параметра…
Ну вот, все и ясно — так как значения".wdFindAsk" и".wdFindContinue" мы уже перебирали, то для отказа от продолжения замены после достижения конца документа нужно поставить значение параметра".Wrap" как "wdFindStop". То есть вышеприведенная таблица должна иметь вид
Параметры поиска • Необходимый фрагмент кода
Вперед, с согласием на продолжение поиска
Forward = True
Wrap = wdFindAsk
Назад, с согласием на продолжение поиска
Forward = False
Wrap = wdFindAsk
Вперед, без согласия на продолжение поиска
Forward = True
Wrap = wdFindStop
Назад, без согласия на продолжение поиска
Forward = False
Wrap = wdFindStop
Везде
Forward = True
Wrap = wdFindContinue
Осталось разобраться со строчкой".Execute Replace:=wdReplaceAll". По логике вещей, это должна быть команда запуска поиска, тем более что и слово "Execute" означает "Запустить". Посмотрим в справке — по слову "Execute" (рис. 5.16).
Рис. 5.16. Справка по слову Execute.
Так, получаем четыре ссылки: "For information about the Execute method, click one of the following object names: Dialog, Find, KeyBinding, MailMerge". В Microsoft Office 2000/XP это окно Справочной системы VBA несколько красивее, но перечень объектов, к котором может быть применен метод Execute, в нем такой же, разве что отдельно приводятся ссылки на примеры кода. Нас интересует вторая ссылка — "Find", так как мы работаем именно с этим объектом. Открываем (рис. 5.17)…
Рис. 5.17. Справка по команде Execute объекта Find
Так и есть — команда".Execute" запускает команду поиска и замены на выполнение: "Runs the specified find operation. Returns True if the find operation is successful.". Из текста справки также узнаем, что все параметры поиска и замены можно было бы задать и в скобках, а, кроме того, результат выполнения команды можно записать в переменную — успешен ли был поиск или нет (то есть были ли найдены в данном сеансе работы команды "Найти и заменить" искомые элементы), принимающую значения соответственно "True" или "False". Сейчас данная возможность не требуется, однако запомнить ее стоит — мало ли когда пригодится.
Продолжаем изучать записанную макрокоманду.
ActiveDocument.Save
Вопросов не вызывает — это команда сохранения активного документа.
ActiveDocument.SaveAs FileName:="Доклад!.rtf", FileFormat:=wdFormatRTF, LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= False
А вот здесь уже понадобится редактирование. Это команда "Сохранить Как…" — поскольку соответствующая команда Word представляет собой диалоговое окно, то в текст макроса помещаются все возможные параметры, как соответствующие установленным по умолчанию, так и нет: ''''AddToRecentFiles" — добавлять ли ярлык в папку "Recent", ''''EmbedTrueTypeFonts" — внедрять ли шрифты TrueType.
Наиболее интересны элементы команды "FileName:=”Доклад!.rtf"" и "FileFormat:=wdFormatRTF" — имя файла, под которым сохраняется активный документ, и тип сохраняемого файла. Тип нас устраивает — формат Rtf. А вот как быть с именем? Ведь у каждого файла должно быть свое, уникальное имя. А тут получается, что все файлы, обрабатываемые данным макросом, станут сохраняться под одним и тем же именем, что, ясное дело, вызовет их запись друг на друга и тем самым потерю данных во всех них, кроме обработанного последним. Что же делать?