Интернет-журнал "Домашняя лаборатория", 2007 №7
Шрифт:
Forward = False
Wrap = wdFindAsk
Везде
Forward = True
Wrap = wdFindContinue
Видно, что наличие или отсутствие согласия на продолжение поиска, даваемое в выскакивающем запросе, не влияет на записываемый текст. А как же тогда отказаться от этого запроса на продолжение — ведь в готовой программе он явно неуместен? Откроем текст макроса и поставим после команды".Wrap" еще один знак "=" (рис. 5.15). Выпал список возможных продолжений.
Рис. 5.15. Вот так можно определить возможные значения параметра…
Ну
Параметры поиска • Необходимый фрагмент кода
Вперед, с согласием на продолжение поиска
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. А вот как быть с именем? Ведь у каждого файла должно быть свое, уникальное имя. А тут получается, что все файлы, обрабатываемые данным макросом, станут сохраняться под одним и тем же именем, что, ясное дело, вызовет их запись друг на друга и тем самым потерю данных во всех них, кроме обработанного последним. Что же делать?
Попробуем для начала просто исключить строчку с указанием имени из текста данной команды. Создадим еще один модуль, скопируем туда всю команду "ActiveDocument.SaveAs" со всеми параметрами и удалим строчку "FileName: = ”Доклад!. rtf"". Запустим программу… ничего не произошло. Но ведь программа что-то делала: и жесткий диск работал, и система была недоступна пару секунд, и сообщений об ошибках не было… Что же все же сработало? А откроем-ка в "Блокноте" или другом редакторе простого текста исходный файл, который обрабатывался и сохранялся после обработки — у меня это был файл "Доклад2.doc" (рис. 5.18), предварительно выгрузив его из Word — чтобы "Блокнот" мог его открыть.
Рис. 5.18. Откроем в "Блокноте" файл, который сохранялся нашей командой.
Так вот в чем дело — файл был сохранен в формате Rtf, но под прежним именем и с расширением".doc"! И исходный файл теперь потерян — на его место записан новый. Нас это совершенно не устраивает — ладно, имя пусть будет то же, а вот расширение должно быть именно".rtf". Тогда и перезаписи исходного файла не произойдет — расширение-то будет другим.
Итак, при запуске нашей программы происходит перезапись обрабатываемого файла в формате Rtf, но с прежними именем и расширением. Интересно, а что будет, если запустить эту программу при активном ни разу не сохранявшемся документе? Ведь тогда программе будет неоткуда брать имя и расширение, — что она сделает? Запускаем…
Активный документ приобрел имя "Docl.doc" (или "Doc2.doc", "Doc3.doc" — у кого как[232]). Но где же он сохранился? Ищем по F3 в "Проводнике" — так, сохранен он в папке, где произошло последнее ручное сохранение какого-либо файла или в папке для документов Word по умолчанию: "Мои документы" или другая, заданная пользователем, путь к которой можно посмотреть во вкладке "Сервис-Параметры-Расположение" (рис. 5.19).
Рис. 5.19. Здесь можно посмотреть путь к папке для документов Word по умолчанию.
Следовательно, при программном сохранении ранее несохранявшегося документа без задания ему имени и места сохранения[233] происходит сохранение активного документа в папке по умолчанию (или в папке, где был последний раз сохранен вручную какой-нибудь документ) и с именем по умолчанию. Примем к сведению.