действия пользователя приводят к определенной реакции приложения, если эти действия предусмотрены и не заблокированы. Если вы хотите, чтобы пользователи чувствовали себя комфортно при работе с вашими программами, начинайте создавать свои диалоговые окна с разработки событийных процедур.
Такие объекты, как формы и элементы управления приводят в действие, то есть делают доступными, некоторые события. Можно написать собственные VBA-процедуры, реагирующие на события. Такие процедуры, называются событий-
ными процедурами (event procedures) или процедурами обработки событий.
Событийные процедуры следует записывать в модуль класса, который является частью UserForm. При этом такие процедуры должны иметь имена в виде ObjectName_ EventName, где ObjectName - имя формы или элемента управления, a EventName - имя события, с которым вы хотите работать. Такой формат имени позволяет VBA сопоставлять заданному событию требуемую процедуру.
Большая часть программы, которую вы записываете в модуль класса формы, будет связана с обработкой событий. В табл. 8.3 перечислены события, для которых вы можете написать процедуры обработки.
|
|
|
Таблица 8.3 |
|
События объектов UserForm |
|
|
|
Синтаксис заго- |
|
|
Событие |
ловка процедуры |
Описание |
|
|
обработки события |
|
|
Activate |
Private Sub object_ |
Инициируется |
всякий раз, |
|
Activate() |
когда окно формы становит- |
|
|
|
ся активным. |
Используйте |
|
|
событие для обновления со- |
|
|
|
держимого диалоговых эле- |
|
|
|
ментов управления, чтобы |
|
|
|
отразить любые изменения, |
|
128
Продолжение табл. 8.3
|
|
которые произошли, |
пока |
||||
|
|
окно формы было неактив- |
|||||
|
|
ным |
|
|
|
|
|
Click |
Private Sub |
Инициируется |
всякий |
раз, |
|||
|
Оbject_Click (index |
когда по форме (любой ее |
|||||
|
As Long) |
части, не занятой элемента- |
|||||
|
|
ми |
управления) |
щелкают |
|||
|
|
мышью |
|
|
|
|
|
DblClick |
Private Sub object_ |
Инициируется |
всякий |
раз, |
|||
|
DblClick (index As |
когда по форме (любой ее |
|||||
|
Long, ByVal Cancel |
части, не занятой элемента- |
|||||
|
As MSForms. Re- |
ми |
управления) |
дважды |
|||
|
turnBoolean) |
щелкают мышью |
|
|
|||
Deactivate |
Private Sub object_ |
Инициируется |
всякий |
раз, |
|||
|
Deactivate() |
когда форма перестает быть |
|||||
|
|
активной |
|
|
|
|
|
Initialize |
Private Sub ob- |
Инициируется |
всякий |
раз, |
|||
|
ject_Initialize () |
когда форма впервые загру- |
|||||
|
|
жается в память посредст- |
|||||
|
|
вом |
выполнения оператора |
||||
|
|
Load или с помощью метода |
|||||
|
|
Show. Используйте это со- |
|||||
|
|
бытие для |
инициализации |
||||
|
|
элементов |
управления фор- |
||||
|
|
мы при ее появлении на эк- |
|||||
|
|
ране |
|
|
|
|
|
Resize |
Private Sub User- |
Инициируется |
при |
измене- |
|||
|
Form_Resize () |
нии размеров формы |
|
||||
Terminate |
Private Sub object_ |
Инициируется всякий раз, |
|||||
|
Terminate () |
когда форма выгружается из |
|||||
|
|
памяти. Используйте это со- |
|||||
|
|
бытие для осуществления |
|||||
|
|
любых специальных слу- |
|||||
|
|
жебных задач, которые не- |
|||||
129
Окончание табл. 8.3
обходимо выполнить прежде, чем переменные формы будут выгружены
В дополнение к методам, свойствам и событиям, встроенным в объект UserForm, VBA предоставляет два оператора, которые особенно полезны работе с объектами форм: Load и Unload, позволяющие загрузить форму в память или же удалить ее оттуда соответственно:
Load Object
Unload Object
Здесь Object представляет любую допустимую ссылку на объект UserForm.
Оператор Load загружает в память объект UserForm и запускает метод формы Initialize, но не выводит форму на экран. Когда форма загружена, можно использовать написанную на VBA программу для работы с объектом UserForm. Оператор Unload удаляет из памяти UserForm, а также все переменные формы. После того как форма выгружена, она перестает быть доступной для VBA-кода.
8.5. Элементы управления
Объект UserForm может содержать те же элементы управления, что и находящиеся в диалоговых окнах Word, Excel или других приложений Windows. Элементы управления (controls) - это элементы диалогового окна, которые дают возможность пользователю взаимодействовать с программой. Они включают в себя кнопки-переключатели, текстовые поля, линейки прокрутки, командные кнопки и так далее.
Многие производители программного обеспечения разрабатывают пакеты, расширяющие набор элементов управления. Вы можете добавлять элементы управления (известные как объекты ActiveX и Automation) к панели Toolbox (панели элементов), предварительно создавая ссылку из вашего проекта на библиотеку, содержащую расширенный набор элементов
130
управления. После этого можно добавлять данные элементы управления на панель Toolbox.
Каждый элемент управления - это объект с определенными свойствами, методами и событиями. Как и для формы, их содержащей, вы можете устанавливать свойства элементов управления программным путем или посредством Properties Window редактора VB. В программе вы можете присваивать или восстанавливать значения свойств элементов управления также как для любых других объектов.
В табл. 8.4 представлены стандартные элементы управления, включенные в VBA, а также назначение этих элементов.
Таблица 8.4 Стандартные элементы управления VBA
Элемент |
Назначение элемента |
|
управления |
|
|
|
|
|
Label (надпись, |
Позволяет создавать заголовки |
элементов |
метка) |
управления, которые не имеют собственных |
|
|
встроенных заголовков. Используйте этот |
|
|
элемент для того, чтобы поместить на фор- |
|
|
му статический текст, например, инструк- |
|
|
ции, советы по заполнению других диало- |
|
|
говых элементов управления |
|
TextBox (тек- |
Окно редактируемого текста |
свободной |
стовое поле) |
формы для ввода данных. Может быть од- |
|
|
ноили многострочным |
|
СomboBox (по- |
Этот элемент управления объединяет окно |
|
ле со списком) |
редактирования и окно списка. Используйте |
|
|
его, когда хотите предложить пользователю |
|
|
выбрать значение, но при этом дать ему |
|
|
возможность ввести данные, отсутствую- |
|
|
щие в списке. Вы можете также ограничить |
|
|
выбор только теми значениями, которые |
|
|
появляются в ComboBox для эмуляции нис- |
|
|
падающего списка |
|
131
|
Продолжение табл. 8.4 |
ListBox (список) |
Отображает список значений, из которых |
|
пользователь может сделать выбор. Окна |
|
списка можно использовать, чтобы дать |
|
возможность пользователю выбрать только |
|
одно значение или же несколько |
CheckBox (фла- |
Стандартный флажок (квадратное окно, со- |
жок) |
держащее «галочку», если элемент выбран). |
|
Используйте флажки для выбора вариантов, |
|
которые не являются взаимоисключающи- |
|
ми |
OptionButton |
Стандартная кнопка-переключатель (круг- |
(переключатель) |
лое окно, при выборе в центре него нахо- |
|
дится черная точка). Используйте Option- |
|
Button, когда пользователю необходимо |
|
сделать выбор между «включено/выключе- |
|
но», «истина/ложь». Кнопки-переключате- |
|
ли, как правило, объединяются вместе при |
|
помощи рамки для создания группы пере- |
|
ключателей |
ToggleButton |
Выключатели служат для той же цели, что и |
(выключатель) |
флажки, но выводят установки в виде кноп- |
|
ки находящейся в «нажатом» или «отжа- |
|
том» состоянии |
Frame (рамка) |
Визуально и логически объединяет некото- |
|
рые элементы управления (особенно флаж- |
|
ки, переключатели и выключатели). Ис- |
|
пользуйте Frame, чтобы показать пользова- |
|
телю, какие элементы управления в диало- |
|
говом окне связаны между собой, или что- |
|
бы выделить группу элементов управления, |
|
отделяя ее от остальных элементов управ- |
|
ления, находящихся в диалоговом окне |
CommandButton |
Используйте кнопки для выполнения таких |
(кнопка) |
действий, как Cancel (Отмена), Save (Со- |
|
хранить), ОК и так далее. Когда пользова- |
132