Каммингс Стив
Шрифт:
Процедура обработки события может делать все, что и любая другая процедура: вычислять значения переменных, манипулировать свойствами и методами объектов, загружать и отображать другие формы. После завершения выполнения процедуры обработки события контроль возвращается к форме. Программа перейдет в состояние ожидания следующего события.
Формы VBA и элементы управления в них могут распознавать самые различные события. (На жаргоне VBA, когда говорится, что объект "имеет" события, подразумевается, что объект может регистрировать и распознавать эти события.) У форм и элементов управления есть одинаковые события, но набор событий каждого объекта индивидуален. Часто встречающиеся события приведены в табл. 10.1.
Таблица 10.1. Избранные события форм и элементов управления
Событие | Объекты, которые распознают событие | Когда происходит событие |
Activate | Формы | Каждый раз, когда форма активизируется (получает фокус ввода) |
AddControl | Формы, фреймы и формы с множеством страниц | При добавлении в объект элемента управления во время выполнения формы |
AfterUpdate | Все "действующие" элементы управления, кроме кнопок | После установки нового значения для элемента управления, в момент перехода от данного элемента управления к другому |
Change | Все "действующие" элементы управления, кроме кнопок | При изменении значения свойства Value элемента управления |
Click | Формы и все типы элементов управления | После щелчка кнопкой мыши на объекте |
DblClick | Формы и все типы элементов управления | После двойного щелчка кнопкой мыши на объекте |
DropButtonClick | Текстовые поля и поля со списком | При появлении раскрывающегося списка (после щелчка на кнопке раскрытия или нажатия клавиши <F4>) |
Enter | Все типы элементов управления | Непосредственно перед тем, как элемент управления получит фокус ввода от другого элемента управления в той же форме |
Error | Формы и все типы элементов управления | Когда возникает ошибка, но информация о ней не может возвратиться программе |
Exit | Все типы элементов управления | Непосредственно перед тем, как фокус ввода перейдет от данного элемента управления к другому в той же форме |
KeyUp, KeyDown, Keypress | Формы и все типы элементов управления | При нажатии или отпускании кнопки |
Layout | Формы, фреймы и формы с множеством страниц | При изменении размеров объекта |
RemoveControl | Формы, фреймы и формы с множеством страниц | При удалении элемента управления из объекта во время выполнения формы |
Scroll | Формы, фреймы и формы с множеством страниц, а также текстовые поля, списки и поля со СПИСКОМ | При изменении положения бегунка полосы прокрутки |
Zoom | Формы, фреймы и формы с множеством страниц | При изменении масштаба объекта (значения свойства Zoom) |
Программирование обработки событий
Как видно из табл. 10.1, формы и элементы управления могут отвечать на многие события. Но когда форма действительно отвечает на какое-нибудь конкретное событие? Только тогда, когда она имеет соответствующую процедуру для этого события. Процедуры обработки событий должны быть кем-то созданы - в данном случае вами.
Создание процедуры обработки события не отличается от создания любой другой процедуры в VBA. Нужно только знать, куда поместить соответствующие операторы. Программный код для процедуры обработки события, как и весь остальной связанный с формой программный кол, в редакторе Visual Basic размешается в окне программного кода этой формы.
Следовательно, процедуры обработки событий для всех элементов управления в форме, как и для самой формы, создаются в окне программного кода формы. Поэтому, перед тем как программировать соответствующие событиям процедуры, выполните следующие шаги.
1. Откройте окно программного кода формы.
Двойной щелчок на форме или любом ее элементе управления - самый короткий путь для этого. Иначе можно выделить форму и выбрать View=Code из контекстного (вызываемого щелчком правой кнопки мыши) меню для формы или элемента управления, с которыми вы собираетесь работать, или же нажать <F7>, когда форма выделена в ее окне UserForm.
2. В окне программного кода формы выберите объект, для которого вы хотите создать процедуру обработки события.
Объект выбирается из раскрывающегося списка объектов вверху слева в окне программного кода формы (рис. 10.25).
3. Выберите событие, для которого нужно создать программный код.
На этот раз используйте раскрывающийся список процедур, размещенный в окне программного кода вверху справа.
Рис. 10.25. Выбор элемента управления в окне программного кода формы перед началом создания процедуры обработки события
Как только из раскрывающегося списка процедур будет выбрано событие, VBA немедленно перенесет вас прямо к процедуре его обработки. Если для события еще не создано никакого программного кода, VBA создаст для вас заготовку процедуры, разместив курсор ввода в пустой строке между оператором объявления процедуры и ее завершающим оператором (см. рис. 10.25). Если процедура обработки события уже содержит программный код, VBA просто поместит курсор ввода в его первую строку.
Вам не стоит беспокоиться об объявлении процедур, так как VBA делает это автоматически, когда вы выбираете событие в окне программного кода
Рис. 10.26 Только что созданная заготовка процедуры обработки события в окне редактора Visual Basic
Как влдно из рис. 10.26, синтаксис процедур обработки событий не отличается от синтаксиса обычных процедур типа Sub. Единственное, что отличает процедуру обработки события, так это ее имя. Чтобы процедура обработки события вообще функционировала, ее имя должно состоять из имени объекта (формы или элемента управления), за которым следуют символ подчеркивания и официальное имя события VBA. Посмотрите на следующие примеры:
Private Sub cmdCalcuiateSquareRoot_Click
End Sub
Private Sub UserForm_Activate
End Sub
Private Sub sclVolumeControl_Change
End Sub
Единственный случай, когда возникают проблемы с именем процедуры обработки события, - когда имя объекта, которому соответствует процедура, изменяется после создания процедуры. VBA не меняет при этом имя процедуры автоматически, поэтому вы должны открыть окно программного кода и привести имя процедуры обработки события в соответствие с новым именем элемента управления.