Похоже, это и есть то, что нам надо. Проверим. Модифицируем экспериментальную процедуру следующим образом:
Sub experience2()
MsgBox ActiveDocument.Name
End Su
Это позволит нам вызвать окно сообщения с значением функции "ActiveDocument.Name". Можно было бы написать "Debug.Print ActiveDocument.Name", что отобразило бы значение этой функции в специальном Окне отладки (вызывается из меню редактора VBA "Вид"-"Окно отладки"). Но использовать окно сообщения как-то привычнее. Итак, нажимаем F5… получаем окно с сообщением: "Доклад1.doc".
Но нам ведь нужно одно только имя, без расширения! Как же его получить? Наверное, проще всего убрать последние четыре символа — ".doc". Но как?
Воспользуемся справкой. Нажмем F1 в редакторе VBA, в открывшемся окне нажмем кнопку «Разделы», а там — "Предметный указатель", — в нем все разделы справки классифицированы по смыслу, в то время как в разделе «Поиск» лишь составлена база данных по всем словам, входящим в справочную систему VBA.
Наберем в строке поиска слово «строка». Из списка разделов справочной системы VBA выберем то, что нам надо — строчку "крайние левые символы" (ведь нам нужно получить из имени документа с расширением только его имя, то есть левую часть строки без четырех правых символов, то есть крайние слева символы). Получаем справку по функции «Left» (рис. 3.10).
Превосходно — функция «Left» является именно той функцией, которая нам требовалась. Но она требует значение количества символов во всей строке — как это узнать? Да так, как описано в данном справочном окне в разделе "Дополнительные сведения" — через функцию «Len». Нажмем ссылку "См. также", выберем из списка строчку "Функция Len" и изучим появившуюся информацию.[4]
Немного подумав и использовав данные о синтаксисе обеих команд в справке, можно написать команду, которая возвращает строку без последних четырех символов:
imyadoc = Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4)
Можно проверить. Создадим еще один модуль:
Sub experience3()
imyadoc = Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4)
MsgBox imyadoc
End Sub
и запустим его. В окне сообщения — имя документа без расширения. Все так, как нам необходимо.
Небольшое отступление
Вышеизложенный способ получения имени активного документа без расширения — не самый лучший, хотя имеет право на существование. Есть еще один способ узнать только имя документа, унаследованный из предыдущих версий Word, — в Word 6.0 и Word 95 была специальная команда для получения имени документа, к сожалению, в VBA не включенная. Однако она может быть использована в VBA, так как макросы для Word 6.0 и Word 95 могут выполняться и в более новых версиях Office. При открытии в Office 97/2000/XP шаблонов с макросами, созданных в предыдущих версиях Office, все макросы автоматически конвертируются для выполнения в VBA с помощью включенной в него версии языка WordBasic, на котором писались макрокоманды для Word 6.0 и Word 95.
В Word 6.0 и Word 95 имелась функция "FileNameInfo$(документ, параметр)", с помощью которой можно было получить имя документа без расширения, путь к документу без имени и путь к документу вместе с именем. Для того, чтобы узнать одно имя документа, без расширения и пути, значение параметра должно быть равно 4. (Все это подробно описано в справке по WordBasic для Microsoft Word 6.0 и Microsoft Word 95.)
В VBA эта функция будет выглядеть так:
imyadoc = WordBasic.[FileNameInfo$](ActiveDocument.Name, 4)
Она возвращает полное имя документа без расширения и пути.
Данная функция просто незаменима при обработке документов с расширениями, состоящими не из трех символов — например, ".html". В то время как в таких случаях с помощью функций «Len», «Mid», «Right» пришлось бы писать огромные фрагменты кода для получения имени документа без расширения, эта функция позволит получить его одной строчкой.
Однако при первой работе с VBA она не будет очевидной, так как узнать о ней, и тем более о ее необходимых параметрах может только тот, кто раньше имел дело с WordBasic. Поэтому в нашей программе будет использоваться предыдущая функция — "imyadoc = Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4)".
Вообще говоря, иногда бывает очень полезным воспользоваться старыми командами WordBasic, которые остались в нем от предыдущих версий. К сожалению, в справке не освещено их применение, однако, если на вашем компьютере установлены сразу две версии Word, то вы можете узнать о таких командах в справке предыдущей версии.
Итак, команда нашей программы "ActiveDocument.SaveAs" должна выглядеть так: