Шрифт:
Рис. 5.38. Поиск no словам "dialog boxes" в Справочной системе VBA Microsoft Office XP.
Текст же в разделе "Displaying Built-In Word Dialog-Boxes" практически идентичен тексту такого же раздела из Справочной системы по VBA из Microsoft Office 97.
Итак, нужная нам команда — Dialogs("имя диалога").Show — найдена.
Попробуем найти окно, которое возвращало бы путь к какой-нибудь директории. Для этого создадим очередной экспериментальный модуль и будем перебирать в нем все возможные имена диалоговых окон (рис. 5.39).
Рис. 5.39. Для поиска нужной команды можно перебрать список встроенных диалоговых окон Word.
В качестве метода вывода окна на экран установим".Display" — вывод окна на экран без каких-либо последующих действий: если с помощью команды
Dialogs(wdDialogFileOpen).Show будет выведено окно открытия файла, то при нажатии кнопки "Открыть" в нем выбранный в окне файл будет открыт, а если окно выводилось командой Dialogs(wdDialogFileOpen).Display, то открытия файла не произойдет, но имя выбранного файла можно будет записать в переменную:
With Dialogs(wdDialogFileOpen)
Display
imya=.Name
End With
и впоследствии использовать это имя по своему усмотрению.
При использовании встроенных диалоговых окон Word обязательно использование оператора With, так как, казалось бы, эквивалентный фрагмент кода
Dialogs(wdDialogFileOpen).Display
imya= Dialogs(wdDialogFileOpen).Name
работать не будет.
После перебора остановимся на окне Dialogs(wdDialogCopyFile) — копирование файла. Посмотрев ссылку "Built-in dialog box argument lists" окна "Displaying built-in Word dialog boxes" (в Справочной системе VBA из Microsoft Office 2000/XP этот раздел присутствует в результатах поиска по словам "dialog boxes", рис. 5.40), получаем список всех возможных аргументов диалоговых окон (то есть параметров, значения которых можно получить из окон или задать им).
Рис. 5.40. Microsoft Office XP. Справка по параметрам встроенных диалоговых окон.
Нас интересует параметр "Directory" (папка, куда скопируется файл, указанный в параметре "FileName" при выполнении метода "Show" или "Execute" — при выполнении последнего метода происходит задание параметров диалогового окна или получение из них необходимой информации без отображения собственно диалога). Поэкспериментируем с этим окном — напишем в экспериментальном модуле следующий код:
Sub experience4
With Dialogs(wdDialogCopyFile)
Display
papka =.Directory
End With
MsgBox papka
End Sub
Запустив эту программу несколько раз, получаем, что в переменную "papka" записывается путь и имя папки, но, если в пути или имени были пробелы, то путь окаймляется кавычками: "C: \Program Files\Microsoft Office\Шaблoны\", а если пробелов в пути не было, то кавычки по краям не ставятся. Поэтому возвращаемую переменную нужно обработать — убрать кавычки.
Сделать это можно с помощью уже известных нам команд "Left", "Right", "Mid" и "Len":
If Right (papka, 1) = Chr$ (34) Then papka = Mid (papka, 2, Len (papka) — 2)
"Chr$(34)" — это команда, которая возвращает символ с ASCII-кодом 34: кавычку. (Каждый символ в Word имеет свой номер — ASCII-код, по которому его можно вызвать на экран. Узнать код выделенного символа можно командой "MsgBox Asc(Selection.Text)". Узнать о командах "Chr$" и "Asc" можно, поискав информацию в Справочной системе.)
Кроме того, не мешало бы сделать так, чтобы при запуске программы окно "Копирование файла" по умолчанию стояло бы на директории с активным документом — не всегда же нужно сохранять все обрабатываемые документы в отдельной папке! Нет ничего проще — установим параметр "Directory" как
"ActiveDocument.Path" перед командой".Display":
With Dialogs (wdDialogCopyFHe)
Directory = ActiveDocument.Path
Display
papka =.Directory
End With
If Right (papka, 1) = Chr$ (34) Then papka = Mid (papka, 2, Len (papka) — 2)
Это и есть необходимый код для отображения диалогового окна и получения пути к папке для сохранения обработанных документов.
Наконец, сделаем так, чтобы нажатие кнопки "Отмена" в диалоговом окне приводило бы не к простому продолжению работы программы, а к выходу из нее. Для этого в справке по слову".Display" узнаем, что эта команда является функцией — то есть возвращает определенное значение, в зависимости от того, какая кнопка была нажата (рис. 5.41).