Найбільш часто макроси використовуються в програмі Access для обробки подій. Подія - це будь-яка дія, розпізнавати об'єкти, і можна визначити реакцію об'єкта на подію. Події відбуваються в результаті дій користувача, виконання інструкцій VBA або генеруються системою. Прикладом подій є висновок на екран форми, звіту, введення даних в текстове поле, натискання кнопки миші або клавіші. Кожному з цих подій можна призначити макрос або процедуру VBA, які будуть автоматично виконуватися у відповідь на подію подія. Практично всі програмування в Access зводиться до написання макросів або процедур, що обробляють події, тобто програмується реакція об'єктів на події. Існує велика кількість різного роду подій, на які реагують об'єкти, причому часто виникає не одне, а ціла послідовність подій. Тому необхідно володіти певним умінням, щоб вирішити, якому події слід призначити створений вами макрос або процедуру VBA.
Почнемо з самого простого. Відкриємо форму "Клієнти" (Customers) в базі даних "Борей". У цій формі відображається інформація про клієнта. Припустимо, ми хотіли б бачити не тільки цю інформацію, але й дані про куплені клієнтом продуктах. Було б добре створити кнопку Замовлення клієнта, при натисканні якої з'являлася б форма "Замовлення" (Orders) із замовленнями тільки того клієнта, який в даний момент обраний у формі "Клієнти" (Customers). Для того щоб отримати бажане, створимо макрос, який буде виконуватися, коли відбудеться подія Натискання кнопки (On Click) у формі "Клієнти" (Customers).
Щоб створити макрос, що визначає описану реакцію програми на подію Натискання кнопки (OnClick):
1. Відкрийте форму "Клієнти" (Customers) в режимі Конструктора.
2. Створіть кнопку в області заголовка форми. При цьому кнопка майстра на панелі елементів повинна бути віджата, тому що в противному випадку вам буде запропоновано створити процедуру обробки подій, а не макрос.
3. Відкрийте вікно властивостей щойно створеної кнопки, якщо воно ще не відкрито, і розкрийте вкладку Події (Event).
4. Зверніть увагу, скільки різних подій пов'язано тільки з командним кнопкою. Крім звичайного натискання, яке ми зараз і будемо використовувати, в набір подій кнопки входять отримання та втрата фокусу, подвійне клацання кнопкою миші, просте переміщення покажчика миші над кнопкою і пр. Таке різноманіття подій дає розробнику великі можливості по створенню зручного інтерфейсу користувача. Тепер знайдіть в списку подія Натискання кнопки (On Click) і встановіть курсор у відповідну клітинку. Це поле зі списком, і в даний момент воно пусте. Якщо відкрити цей список, то першим його елементом буде [Процедура обробки подій] ([Event procedure]), а далі йде перелік усіх макросів, що існують в додатку (Мал. 10).
5. Оскільки потрібного нам макросу у списку немає, давайте його створимо. Для цього натисніть кнопку будівника, що знаходиться праворуч від поля. З'явиться вікно Будівник (Choose Builder), в якому пропонується вибрати один з трьох розбудовників: Вирази (Expression Builder), Макроси (Macro Builder) і Програми (Code Builder) (Мал. 11).
6. Виберіть Макроси (Macro Builder) і натисніть кнопку ОК. Відкриється "вікно макросів і діалогове вікно, в яке потрібно ввести ім'я створюваного макросу. Введіть ім'я Замовлення клієнта.
Мал.10. Діалогове вікно властивостей кнопки
Мал. Діалогове вікно Будівник
7. У макрос потрібно додати єдину макрокоманду ОткритьФорму (OpenForm). Значення аргументів цієї дії наведено в табл. І.З.
Таблиця 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).
8. Закрийте вікно макросу, зберігши зміни. У вікні властивостей кнопки в полі Натискання кнопки (On Click) з'явиться ім'я макросу "Замовлення клієнта".
9. Розкрийте вкладку Макет (Format) і введіть в поле Підпис (Caption) назву кнопки: Замовлення клієнта. Те ж саме ім'я рекомендується ввести в поле Ім'я (Name) на вкладці Інші (Other).
Тепер залишається перейти в режим Форми і перевірити, як макрос відпрацьовує подія Натискання кнопки (On Click). Якщо ви ніде не помилилися, то повинні побачити на екрані картинку, схожу на ту, що зображена на Мал. 12.
Мал.12. Форма "Замовлення"
Однак ми виконали ще не всі необхідні дії. Якщо перейти до наступного запису у формі "Клієнти" (Customers), дані у формі "Замовлення" (Orders) вже не будуть правильно відображати ситуацію - вони не змінюються. Потрібно зробити так, щоб ці дані змінювалися синхронно з переходом до інших записів у формі "Клієнти" (Customers) або щоб це вікно просто закривалося. Розглянемо реалізацію другого варіанта. Форма "Замовлення" (Orders) відкривається, коли ми натискаємо кнопку Замовлення клієнта, і стає активною. Потрібно зробити так, щоб вона закривалася, коли активною стає форма "Клієнти" (Customers). Для цього потрібно вибрати відповідне подія і задати процедуру або макрос його обробки. Якщо ви відкриєте вікно Властивості (Properties) форми "Клієнти" (Customers) і розкриєте вкладку Події (Event), то серед безлічі подій побачите подія Включення (On Activate). Це якраз та подія, яка нам потрібно. Виберемо цю подію, але тепер ми не будемо створювати нову групу макросів, а додамо новий макрос у групу макросів "Клієнти" (Customers), яка вже містить макроси для форми "Клієнти" (Customers). Виберіть цю групу макросів у розкривному списку та натисніть кнопку будівника. Відкриється вікно, в якому відображено два макроси. Додамо до них ще один макрос. Назвемо його "Закриття" і введемо макрокоманду Закрити (Close) з відповідними параметрами (табл. 4). Але перед закриттям форми необхідно перевірити, чи відкрита вона. Для цього скористаємося функцією isLoaded, яка повертає значення Істина, якщо форма відкрита, і Брехня - в іншому випадку. Як аргумент на функцію isLoaded потрібно передати ім'я форми. Отже, в стовпець Умова (Condition), навпаки макрокоманди Закрити (Close), введіть IsLoaded ("Замовлення") (або IsLoaded ("Orders")).
Таблиця 4. Значення аргументів дії Закрити (Close)
Аргумент
Значення
Тип об'єкта (Object Type)
Форма (Forms)
Ім'я об'єкта (Object Name)
Замовлення (Orders)
Збереження (Save)
Ні (No)
Аргумент Збереження (Save) дозволяє визначити, чи буде Access при закритті форми відображати діалогове вікно для підтвердження збереження змінених даних. Оскільки ми відкривали форму "Замовлення" (Orders) в режимі тільки для читання, зміна даних заборонено, тому даному аргументу необхідно присвоїти значення Ні (No). Готовий макрос зображений на Мал. 13.
Закрийте вікно макросу, зберігши зміни. Змініть ім'я макросу, призначеного події Включення (On Activate). Для цього виберіть у списку або введіть ім'я Кліенти.Закрить (Customers.Close) і натисніть клавішу <Enter>. Тепер збережіть форму, перейдіть в режим Форми і перевірте, як працюють створені вами макроси.