Для получения от пользователя определенных данных, кроме создания форм, можно использовать встроенные диалоги VBA — диалоговое окно "Открытие файла", "Свойства документа" и др. Они вызываются командой Dialogs("Название диалога").Show (показывает диалог и выполняет соответствующие ему действия), Dialogs("Название диалога").Display (только показывает диалог и позволяет записать в переменные введенные изменения, но не выполняет никаких действий и ничего не изменяет: очень полезно для использования встроенных диалоговых окон в своих целях), Dialogs("Название диалога").Execute (ничего не отображает на экране, но применяет все те изменения, которые были сделаны ранее с помощью команды With Dialogs ("Название диалога")… End With). Для вывода списка возможных диалогов наберите "Dialogs(", и Вам будет выдан их список. К сожалению, описания конкретных диалогов нет в справке — придется просто попробовать отобразить каждый, хотя список возможных параметров каждого диалога в справке есть.
В Microsoft Excel набора встроенных диалогов нет, однако отобразить на экране окна открытия и сохранения файлов все же можно. Для этого служат команды "Application.GetOpenFilename" и "Application.GetSaveAsFilename". В результате выполнения команды "file = Application.GetOpenFilename" будет отображено окно открытия файла, а после выбора имя файла поместится в переменную (Здесь — "file"). Команда же "rez = Application.GetSaveAsFilename" отобразит окно сохранения файла, в переменную же (здесь — rez) будет помещено True — если сохранение успешно, и False — если нет. Обе команды допускают указание параметров (например, меняющих заголовки окна и других).
* * *
Помимо привычных кнопок и выпадающих меню в Word существует еще несколько типов элементов вызова команд и программ — поля ввода и выпадающие меню выбора. К примеру, элемент "Выпадающее меню с полем ввода" используется для указания масштаба просмотра документа на панели "Стандартная" или для ввода вопроса к справочной системе в OfficeXP (рис. 8.5).
Рис. 8.5.
Создать такое поле можно только программно — через окно настройки это сделать нельзя (как, впрочем, и удалить их впоследствии). Для такого создания следует в окне отладки или в отдельном модуле выполнить команду
где "х" — номер панели (можно узнать, просто перебрав их все с помощью команды "MsgBox CommandBars(номер).Name" и выяснив, какой номер имеет панель инструментов с нужным названием), а "у" — одна из констант: "msoControlEdit", "msoControlDropdown", "msoControlComboBox", создающие соответственно поле ввода текста, выпадающее меню и выпадающее меню с возможностью ввода текста.
Управлять созданными полями, добавляя, к примеру, в них текст, можно стандартными командами работы с панелями инструментов. Так, чтобы поместить какой-либо текст в поле ввода, следует использовать команду
где "х" — номер панели, "у" — номер по счету слева направо данного поля среди кнопок этой панели. Таким образом можно использовать эти элементы для отображения нужной пользователю информации. Точно так же — командой "a=CommandBars(х).Controls(у).Text" можно считать информацию из данного поля и использовать ее в работе программы. Следует лишь внимательно следить за соответствием номеров кнопок их реальному расположению, — при изменении порядка кнопок программа может работать неверно. Назначить макрос кнопке, меню или полю ввода можно командой "CommandBars(х). Controls(у).OnAction = "Имя модуля. Имя программы"".
* * *
Если у вас на компьютере установлено несколько версий Microsoft Office, то вы наверняка сталкивались с одной весьма неприятной ситуацией. Все компоненты Microsoft Office, начиная с 2000-й версии, при каждом своем запуске сканируют системный реестр и перепрограммируют открытие файлов, которые должны ими открываться —.doc, xls — "на себя", заставляя их открываться именно в новой версии, а не в старой. Помимо того, что это занимает немало времени, подобная ситуация мешает использовать на компьютере сразу две версии Office, например, для того, чтобы, работая в старой, постепенно осваивая новую или, используя новую версию, не отказываться от возможностей, входящих только в предыдущую.
Для того, чтобы "отучить" Word2002 (из OfficeXP) перерегистрировать расширения файлов при каждом запуске, создайте в системном реестре, в разделе HKEY_CURRENT_USER\Software\Microsoft\0ffice\10.0\word\0ptions параметр NoRereg, имеющий формат Dword и равный 1, а чтобы сделать то же с Word2000, отредактируйте так же содержимое раздела HKEY_CURRENT_USER\Software\ Microsoft\Office\9.0\word\Options.
PROGRESSBAR В ВАШИХ ПРОГРАММАХ