Назначение макроса событию
Наиболее часто
макросы используются в приложении Access для обработки событий.
Событие —
это любое действие, распознаваемое объектом, и можно определить реакцию
объекта на событие. События происходят в результате действий пользователя, выполнения
инструкций VBA или генерируются системой. Примером событий является вывод на
экран формы, отчета, ввод данных в текстовое поле, нажатие кнопки мыши или клавиши.
Каждому из этих событий можно назначить макрос или процедуру VBA, которые будут
автоматически выполняться в ответ на произошедшее событие. Практически все программирование
в Access сводится к написанию макросов или процедур, обрабатывающих события,
т. е. программируется реакция объектов на события. Существует большое количество
различного рода событий, на которые реагируют объекты, причем часто возникает
не одно, а целая последовательность событий. Поэтому необходимо обладать определенным
умением, чтобы решить, какому событию следует назначить созданный вами макрос
или процедуру VBA. Все тонкости этого выбора будут обсуждаться
в разд. "Программирование
в формах и отчетах" гл. 13.
Здесь мы опишем только способ назначения
макроса событию и приведем примеры обработки событий с помощью макросов.
Начнем с самого
простого. Откроем форму "Клиенты" (Customers) в базе данных "Борей".
В этой форме отображается информация о клиенте. Допустим, мы хотели бы видеть
не только эту информацию, но и данные о купленных клиентом продуктах. Было бы
хорошо создать кнопку
Заказы клиента,
при нажатии которой появлялась
бы форма "Заказы" (Orders) с заказами только того клиента, который
в данный момент выбран в форме "Клиенты" (Customers). Для того чтобы
получить желаемое, создадим макрос, который будет выполняться, когда произойдет
событие
Нажатие кнопки
(On Click) в форме "Клиенты" (Customers).
Чтобы создать
макрос, определяющий описанную реакцию приложения на событие
Нажатие кнопки
(OnClick):
Рис. 11.10.
Диалоговое окно свойств кнопки
Рис. 11.11.
Диалоговое окно
Последовательность перехода
Таблица
11.3. Значения аргументов макрокоманды
ОткрытьФорму (Openform)
Аргумент
|
Значение
|
||
Имя формы (form Name) |
Заказы (Orders) |
||
Режим (View) | Форма (form) | ||
Условие отбора (Condition) | [КодКлиента] = [forms] ! [Клиенты] ! [КодКлиента] | ||
Режим данных (Data Mode) | Только чтение (Read Only) | ||
Режим
окна (Window Mode)
|
Обычное (Normal) |
Аргумент
Режим
(View) определяет режим, в котором форма должна быть открыта. Он может принимать
значения:
Форма
(form),
Конструктор
(Design),
Просмотр
(Print
Preview),
Таблица
(Datasheet),
Сводная таблица
(PivotTable) и
Сводная диаграмма
(Pivot Chart). Аргумент
Условие отбора
(Condition)
определяет условие для отбора записей, отображаемых в форме. Условие представляет
собой выражение. В данном случае это выражение содержит ссылку на элемент управления
КодКлиента
(CustomerlD) в форме "Клиенты" (Customers), что
позволяет выбрать все записи из таблицы "Заказы" (Orders), в которых
код клиента равняется значению, заданному в поле "КодКлиента" (CustomerID)
формы "Клиенты" (Customers).
(Подробнее об использовании ссылок
в макросах и выражениях будет рассказано в разд. "Применение макросов"
данной главы.)
Аргумент
Режим данных
(Data Mode) определяет способ
работы с данными и может принимать одно из значений:
Добавление
(Add),
Изменение
(Edit) или
Только чтение
(Read Only). И наконец, аргумент
Режим окна
(Window Mode) определяет тип окна:
Обычное
(Normal),
Невидимое
(Hidden),
Значок
(Icon) и
Окно диалога
(Dialog).
Теперь остается
перейти в режим Формы и проверить, как макрос отрабатывает событие
Нажатие
кнопки
(On Click). Если вы нигде не ошиблись, то должны увидеть на экране
картинку, похожую на ту, что изображена на рис. 11.12.
Рис. 11.12.
Форма "Заказы"
Однако мы
выполнили еще не все необходимые действия. Если перейти к следующей записи в
форме "Клиенты" (Customers), данные в форме "Заказы" (Orders)
уже не будут правильно отражать ситуацию — они не меняются. Нужно сделать так,
чтобы эти данные изменялись синхронно с переходом к другим записям в форме "Клиенты"
(Customers) либо чтобы это окно просто закрывалось. Рассмотрим реализацию второго
варианта. Форма "Заказы" (Orders) открывается, когда мы нажимаем кнопку
Заказы клиента,
и становится активной. Требуется сделать так, чтобы она
закрывалась, когда активной становится форма "Клиенты" (Customers).
Для этого нужно выбрать соответствующее событие и задать процедуру или макрос
его обработки. Если вы откроете окно
Свойства
(Properties) формы "Клиенты"
(Customers) и раскроете вкладку
События
(Event), то среди множества событий
увидите событие
Включение
(On Activate). Это как раз то событие, которое
нам нужно. Выберем это событие, но теперь мы не будем создавать новую группу
макросов, а добавим новый макрос в группу макросов "Клиенты" (Customers),
которая уже содержит макросы для формы "Клиенты" (Customers). Выберите
эту группу макросов в раскрывающемся списке и нажмите кнопку Построителя. Откроется
окно, в котором отобразятся два макроса. Добавим к ним еще один макрос. Назовем
его "Закрытие" и введем макрокоманду Закрыть (Close) с соответствующими
параметрами (табл. 11.4). Но перед закрытием формы необходимо проверить, открыта
ли она. Для этого воспользуемся функцией isLoaded, которая возвращает значение
Истина, если форма открыта, и Ложь — в противном случае. В качестве аргумента
в функцию isLoaded нужно передать имя формы. Итак, в столбец
Условие
(Condition),
напротив макрокоманды Закрыть (Close), введите IsLoaded("Заказы")
(или IsLoaded ("Orders")).
Таблица
11.4.
Значения аргументов макрокоманды Закрыть (Close)
Аргумент
|
Значение
|
||
Тип объекта (Object Type) |
Форма (forms) |
||
Имя объекта (Object Name) | Заказы (Orders) | ||
Сохранение
(Save)
|
Нет (No) |
Аргумент
Сохранение
(Save) позволяет определить, будет ли Access при закрытии формы отображать
диалоговое окно для подтверждения сохранения измененных данных. Поскольку мы
открывали форму "Заказы" (Orders) в режиме только для чтения, изменение
данных запрещено, поэтому данному аргументу необходимо присвоить значение
Нет
(No). Готовый макрос показан на рис. 11.13.
Закройте окно
макроса, сохранив изменения. Измените имя макроса, назначенного событию
Включение
(On Activate). Для этого выберите в списке или введите имя Клиенты.Закрыть
(Customers.Close) и нажмите клавишу <Enter>. Теперь сохраните форму, перейдите
в режим Формы и проверьте, как работают созданные вами макросы.
Рис. 11.13. Макрос для закрытия формы