Итак, при запуске нашей программы происходит перезапись обрабатываемого файла в формате 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".
Рис. 5.21
.Но нам ведь нужно одно только имя, без расширения! Как же его получить? Наверное, проще всего убрать последние четыре символа — ".doc". Но как?
Воспользуемся справкой.
Дальнейшие наши действия и их результат весьма серьезно отличаются в зависимости от той версии Microsoft Office, с которой мы работаем.
1. При работе в Microsoft Office 97 нажмем F1 в Редакторе VBA, в открывшемся окне нажмем кнопку "Разделы" (рис. 5.22), а там — "Предметный указатель" (рис. 5.23 — в нем все разделы справки классифицированы по смыслу, в то время как в разделе "Поиск" просто составлена база данных по всем словам, входящим в справочную систему Visual Basic for Applications).
Рис. 5.22.
Рис. 5.23.
Наберем в строке поиска слово "строка". Из списка разделов справочной системы Visual Basic for Applications выберем то, что нам надо — строчку "крайние левые символы" (ведь нам нужно получить из имени документа с расширением только его имя, то есть левую часть строки без четырех правых символов, то есть крайние слева символы). Получаем справку по функции "Left" (рис. 5.24).
Рис. 5.24.
Превосходно — функция "Left" является именно той функцией, которая нам требовалась. Но она требует значение количества символов во всей строке — как это узнать? Да так, как описано в данном справочном окне — через функцию "Len". Нажмем ссылку "См. также" и выберем из списка строчку "Функция Len" (рис. 5.25).
Рис. 5.25.
Справка по функции Len в Microsoft Office 97.2. Ну, а если мы используем Microsoft Office 2000 или Microsoft Office ХР, то просто задаем вопрос Помощнику (рис. 5.26) или открываем Справочную систему VBA (рис. 5.27) из меню "Help" Редактора VBA, если Помощник скрыт или не установлен. Вопрос, естественно, формулируется по-английски и может звучать, например, так: "Delete right symbols in string" — "Удалить правые символы из строки".
Рис. 5.26.
Рис. 5.27…