Читаем Интернет-журнал "Домашняя лаборатория", 2007 №7 полностью

Вообще говоря, иногда бывает очень полезным воспользоваться старыми командами WordBasic, которые остались в нем от предыдущих версий. К сожалению, в Справочной системе VBA не освещено их применение, однако, если на вашем компьютере установлены сразу несколько версий Word, в том числе Microsoft Word 6.0 или Microsoft Word 95, то вы сможете узнать о таких командах в Справочной системе предыдущей версии этой программы.

* * *

Итак, команда нашей программы "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),

FileForma t: =wdForma tRTF

Иначе Word будет сохранять документы в той папке, где последний раз был сохранен или открыт како-нибудь документ с помощью диалоговых окон "Сохранить как…" и "Открыть…". А это все же не всегда будет той же самой папкой, где находятся обрабатываемые документы, — к тому же документы для обработки можно открывать в Word и путем перетаскивания иконки файла в окно редактора, а при таком способе открытия папка сохранения документов не меняется.

В Visual Basic for Applications у объекта ActiveDocument есть также параметр FullName, который представляет из себя полный путь к документу, включающий и иерархию папок. Подробнее об этом параметре можно узнать в Справочной системе VBA. Иными словами, последнюю команду можно переписать как

ActiveDocument.SaveAs FileName:= Left(ActiveDocument.FullName,

Len(ActiveDocument.FullName) -4), FileFormat:=wdFormatRTF

Она будет давать точно такой же результат, что и приведенная выше.

И, наконец, последняя строчка:

ActiveWindow.Close

End Sub

Вот и конец программы — закрытие активного окна с документом.

Ну, а теперь надо добиться того, чтобы программа могла обрабатывать не один документ, а сразу множество. Можно пойти двумя путями: либо обрабатывать все нужные документы в одной папке, либо обработать все открытые документы, предварительно открыв нужные. Лично я предпочел второй вариант: ведь тогда можно открыть для обработки все действительно необходимые документы, несмотря на их исходное расположение — пусть даже и не в одной папке[234].

Как это сделать? Заметим, что готовый документ закрывается после обработки, и в окне Word активизируется следующий документ из всех открытых в редакторе. Следовательно, во-первых, надо обеспечить выполнение макроса над всеми документами, то есть его повторение — после окончания работы макроса он должен быть выполнен сначала. Можно считать, что в момент обработки в окне Word будут открыты лишь те документы, которые обработать надо — лишние всегда можно закрыть (а в Microsoft Word 97 ничего не мешает открыть для обработки файлов новое окно Word, если остальные открытые документы так уж необходимо оставить именно открытыми). Для выполнения макроса сначала нужно заставить Visual Basic for Applications перейти в начало программы. Поищем в справке Visual Basic for Applications, в Предметном указателе по слову "переход" — есть ли какая команда для этого (рис. 5.31)? Получаем список — "безусловные", "при ошибке", "условные".



Рис. 5.31. Поиск в предметном указателе по слову "переход" в Microsoft Office 97.


Выберем "Безусловные" — ведь в нашей программе надо обязательно перейти к обработке следующего документа. Получаем выбор из двух функций — выберем вторую, название короче — наверняка ее использование проще.



Рис. 5.32.Справка по инструкции Goto в Microsoft Office 97.


Из справки и примера узнаем, что инструкция (то есть встроенная функция, которая не возвращает никаких значений) "Goto" указывает на необходимость перехода к строке, на которой находится установленная нами метка.

(К сожалению, из-за того, что в более старших, чем 97-я, версиях Microsoft Office — 2000-й и ХР Справочная система по VBA не русифицирована, провести в ней такой же поиск, как описан выше, не представляется возможным. Однако, введя в окне Справки в качестве ключевого слова фразу "go to" — в переводе "пойти на…", "перейти на…", можно получить довольно большое число разделов Справки, содержащих его (рис. 5.33).



Рис. 5.33. Справка по инструкции Goto в Microsoft OfficeXP.


Перейти на страницу:

Похожие книги