заложенную Вами в макрос комбинацию клавиш, то Ваша программа начнет работать некорректно.
· Помимо привычных кнопок и выпадающих меню в Word существует еще несколько типов элементов вызова команд и программ — поля ввода и выпадающие меню выбора. К примеру, элемент 'Выпадающее меню с полем ввода' используется для указания масштаба просмотра документа на панели «Стандартная» или для ввода вопроса к справочной системе в OfficeXP.
Создать такое поле можно только программно — через окно настройки это сделать нельзя (как, впрочем, и удалить их впоследствии). Для этого следует в окне отладки или в отдельном модуле выполнить команду
CommandBars(x). Controls.Add Type:=y
где «х» — номер панели (можно узнать, просто перебрав их все с помощью команды 'MsgBox CommandBars(номер). Name' и выяснив, какой номер имеет панель инструментов с нужным названием), а «y» — одна из констант: 'msoControlEdit', 'msoControlDropdown', 'msoControlComboBox', создающие соответственно поле ввода текста, выпадающее меню и выпадающее меню с возможностью ввода текста.
Управлять созданными полями, добавляя, к примеру, в них текст, можно стандартными командами работы с панелями инструментов. Так, чтобы поместить какой-либо текст в поле ввода, следует использовать команду
CommandBars(x). Controls(y). Text = 'текст в поле ввода'
где «х» — номер панели, «y» — номер по счету слева направо данного поля среди кнопок этой панели. Таким образом можно использовать эти элементы для отображения нужной пользователю информации. Точно так же — командой 'a=CommandBars(x). Controls(y). Text' можно считать информацию из данного поля и использовать ее в работе программы. Следует лишь внимательно следить за соответствием номеров кнопок их реальному расположению, — при изменении порядка кнопок программа может работать неверно. Назначить макрос кнопке, меню или полю ввода можно командой 'CommandBars(x). Controls(y). OnAction = 'Имя модуля. Имя программы''.
· Для работы из одного приложения Office с другим можно использовать технологию ActiveX. Она основана на имеющейся в Office возможности представлять одну программу в другой как некий объект, с которым можно работать теми же командами, что используются при непосредственной работе с этой программой. Так, чтобы можно было из Word'овского макроса работать с Excel'ем, следует создать объект 'Excel.Sheet':
·
Dim es As Object
Set es = CreateObject('Excel.Sheet')
Здесь «es» — простое наименование переменной, может быть любым.
(Если надо сразу открыть какой-либо файл Excel'а, то можно использовать команду 'GetObject':
Set es= GetObject('Путь к файлу Excel'а'))
При желании можно сделать созданный объект Excel видимым:
es.Application.Visible = True
Теперь можно этому объекту es (т. е. просто запущенному Excel'у) посылать команды такие же, как и в макросах Excel'а (предваряя текстом 'es.Application.' те из команд, которые не требуют прямого указания объекта, — так как надо дать понять программе, что работа идет именно с Excel'ем). Так, чтобы открыть файл Excel'а, можно также дать команду
es.Application.Workbooks.Open FileName:='Путь к документу Excel'а'
а чтобы, например, поместить в первую ячейку открытой книги текст, используйте команду
es.Cells(1, 1). Value = 'Это столбец A, строка 1'
Закрыть Excel можно командой
es.Application.Quit
Set es = Nothing
Можно даже вызвать на исполнение макрос, содержащийся в книге Excel. Для этого следует использовать команду
es.Application.Run 'имя макроса'
Так что есть простор для творчества.
Во многих программах для Windows используется такой элемент, как ProgressBar — индикатор, показывающий, на сколько продвинулся тот или иной процесс. В частности, он есть практически во всех программах-инсталляторах. К сожалению, в VBA этот элемент отсутствует, но его можно сделать самостоятельно!
Выглядеть он будет, например, так, как на рис. 5.3.
А делается он следующим образом (предполагается, что у нас есть часть программы, в которой выполняется длинный и долгий цикл: то есть известное нам количество множество однотипных операций, и которую надо снабдить ProgressBar'ом):
1. Создаем небольшую форму и помещаем на нее: надпись с пояснительным текстом (например, 'Label1') и две другие надписи, (скажем, «Label2» и 'Label3'), низкие и широкие, которые расположим одну над другой (рис. 5.4).
К примеру, их координаты и размеры:
Зададим в качестве фонового цвета для «Label2» — серый, а для «Label3» — зеленый (свойство «BackColor», вкладка 'Палитра').
Рис. 5.3.
Рис. 5.4.