Воспользуемся справкой. Нажмем F1 в редакторе VBA, в открывшемся окне нажмем кнопку "Разделы", а там — "Предметный указатель", — в нем все разделы справки классифицированы по смыслу, в то время как в разделе "Поиск" лишь составлена база данных по всем словам, входящим в справочную систему VBA.
Наберем в строке поиска слово "строка". Из списка разделов справочной системы VBA выберем то, что нам надо — строчку "крайние левые символы" (ведь нам нужно получить из имени документа с расширением только его имя, то есть левую часть строки без четырех правых символов, то есть крайние слева символы). Получаем справку по функции "Left" (рис. 3.10).
Рис. 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/ХР шаблонов с макросами, созданных в предыдущих версиях 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" должна выглядеть так:
ActiveDocument.SaveAs FileName: = Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4), FileFormat:=wdFormatRTF, LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= False
Все лишнее можно убрать, хотя это не обязательно:
ActiveDocument.SaveAs FileName: = Left(ActiveDocument.Name,
Len(ActiveDocument.Name) — 4), FileFormat:=wdFormatRTF
He мешало бы еще, чтобы новый документ в формате Rtf сохранялся в той же папке, что и исходный. Для этого добавим к параметру "FileName" информацию о пути к активному документу:
ActiveDocument.SaveAs FileName:=ActiveDocument.Path + "\" +
Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4),
FileFormat:=wdFormatRTF