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.
Следовательно, при программном сохранении ранее несохранявшегося документа без задания ему имени и места сохранения[233]
происходит сохранение активного документа в папке по умолчанию (или в папке, где был последний раз сохранен вручную какой-нибудь документ) и с именем по умолчанию. Примем к сведению.Но как же нам быть с нашей программой? Нам ведь надо, чтобы все обрабатываемые файлы сохранялись под своим именем и в формате и с расширением Rtf! А попробуем-ка каким-нибудь способом получить программно имя активного документа. Создадим еще один макрос, и напишем там "ActiveDocument", ставим точку (рис. 5.20) и видим, что среди возможных продолжений команды есть свойство "Name".
Рис. 5.20.
Похоже, это и есть то, что нам надо. Проверим. Модифицируем экспериментальную процедуру следующим образом:
Sub ехрегience2()
MsgBox ActiveDocument. Name
End Sub
Это позволит нам вызвать окно сообщения с значением функции "ActiveDocument.Name". Можно было бы написать "Debug.Print ActiveDocument.Name", что отобразило бы значение этой функции в специальном Окне отладки (вызывается из меню редактора Visual Basic for Applications "Вид"-"Окно отладки"). Но использовать окно сообщения как-то привычнее. Итак, нажимаем F5… получаем окно с сообщением: "Доклад!.doc".