3.2.7. Макроси в Access
Access надає користувачам два засоби автоматизації роботи з базами даних: мова макросів та мова Visual Basic for Applications (VBA).
Мова VBA має переваги перед мовою макросів. Незважаючи на це, останній можна використовувати для створення складних програм і для автоматизації більшості операцій з управління базою даних.
На відміну від Excel і Word, Access автоматичний запис макросів не виконується.
Вікно макросів відкривається в результаті натискання кнопкиСтворитина вкладціМакросивікна бази даних. Воно включає чотири стовпці:Ім'я макросу,Умови,МакрокомандатаПримітка. При створенні нового макросу за замовчуванням відображаються лише стовпціМакрокомандатаПримітка. Показ інших стовпців можна встановити, використовуючи командиІм'я макросуіУмовиз менюВидабо однойменні кнопки на панелі інструментівСтворення макросу.
Зручно розробляти макроси для автоматизації нескладних процесів, таких як відкриття та закриття кількох форм чи звітів, виведення на екран або на друк кількох документів, скасування/відновлення відображення панелей інструментів тощо.
Створення макросів.Після натискання кнопкиСтворитина вкладціМакросикористувач отримує доступ до бланку макросу. У кожному рядку таблиці розміщується одна макрокоманда. Для визначення її параметрів користувач має заповнити запропоновані програмою форми у нижній частині бланка. Найчастіше оператору СУБД вдається визначити всі параметри макрокоманди "по ходу справи", не штудуючи довідник.
Запуск макросу може здійснюватися такими способами:
1.Клацання по кнопціЗапускна панелі інструментів ( на ній зображенознак оклику).
2.Виклик командиЗапуск макросуз менюСервіс.
3.Маркування імені макросу та натискання кнопкиЗапускна вкладціМакросивікна бази даних.
4.Подвійне клацання на імені, що запускається макросу.
Після того, як макрос написаний, розробник програми або користувач повинен визначити спосіб запуску макросу. Крім тривіального шляху - за допомогою менюСервіс- макроси можна викликати програмним шляхом - автоматично або за допомогою елементів керування у формах та звітах. Якщо макрос повинен запускатися незалежно від бажання користувача, то він повинен бути поставлений у відповідність до певної події, яка, у свою чергу, пов'язана з певним об'єктом. Достатньо при визначенні властивостей об'єкта в рядку, який відповідає події, вказати ім'я макросу.
Кнопка з контекстним меню.З елементом керування (зокрема, з кнопкою) може бути пов'язане контекстне меню з командами, визначеними користувачем. Кожна з них запускатиме на виконання макрос або підпрограму Visual Basic. Визначимо послідовність дій, які слід виконати, щоб створити таке меню, пов'язане з кнопкою. Припустимо, що в меню повинні входити три команди, які запускають макроси макро-1, макро-2 і макро-3.
Для вирішення цього завдання необхідно виконати такі дії.
Відкрити форму в режимі конструктора та створити нову кнопку.
Розкрити вікно властивостей кнопки та визначити її підпис, наприклад «Нове меню».
На вкладці властивостейІншівибрати властивістьКонтекстне менюі натиснути кнопку в правій частині рядка, викликавши побудову меню.
Вказати шаблон «Порожній рядок меню».
Введіть у рядокНазваім'я меню, наприкладМоє меню,та натиснути кнопкуДалі. Введений текст переміститься у нижню частину вікна.
ДрукуватиНазваім'я першої команди меню. У прикладі цеКоманда меню 1. Натисніть кнопку із зображенням стрілки праворуч. Назва команди з'явиться у нижній частині вікна з відступом. Це є ознакою команди меню, на відміну імені меню, яке виводиться без відступу.
У рядкуМакрокомандавибрати зі спискуЗапускМакросу.
У рядкуАргументиввести ім'я макросуМакро-1та натиснути кнопкуДалі.
Повторити пункти 5-8 для другого та третього елементів меню, поставивши відповідні назви команд та імена макросів.
10. Натиснути кнопкуОКі ввести у вікніЗбереженняназву меню, наприклад«Нове меню».
Можливості будівельника меню ширші, ніж показано у цьому прикладі. Під час створення меню можна визначати «гарячі клавіші», пов'язані з його елементами, вводити роздільники груп команд, додавати підкоманди тощо.
Контекстне меню викликається після натискання елемента керування правою кнопкою миші. З якою подією треба зв'язати новий макрос, якщо потрібно, щоб він запускався після звичайного натискання того ж елемента управління? З подієюНатискання кнопки. Воно виникає, якщо ви клацаєте об'єкт мишею.
А чи можна пов'язати з об'єктом ще один макрос, який запускався б при подвійному клацанні? Ні, не можна. При подвійному натисканні виникає подіяНатискання кнопкиі буде виконуватися той же макрос, що і при простому натисканні. А чи можна запускати макрос за допомогою подвійного натискання кнопки миші, якщо обробка подіїНатискання кнопкине визначена? Так можна. У цьому випадку макрос повинен викликатися подієюПодвійне натискання кнопки.
Access має великий набірмакрокоманд, обговорення яких за межі даного посібника.
Редагування макросів.Структура таблиці у вікні макросів нагадує структуру звичайної таблиці бази даних. Усі відомі команди редагування тексту, що використовуються для видалення, перенесення, копіювання вмісту осередків, можуть застосовуватися і в рамках таблиці макросу,
Найчастіше поява помилок у макросах зумовлено недотриманням синтаксичних правил. У разі вибору макрокоманд або значень аргументів у списках, ймовірність виникнення помилки вкрай мала. Зовсім інакша справа з аргументами, значення яких задаються "вручну". Якщо в імені об'єкта допущена помилка, дія не може бути виконана. Подібна ситуація виникає і при видаленні чи перейменуванні об'єкта. Якщо макрос, у якому є посилання на такі об'єкти, не змінено відповідним чином, при його виконанні з'явиться повідомлення про помилку.
Необхідно пам'ятати, що дія макрокоманди, в якій не зазначено цільового об'єкта, поширюється на активний об'єкт.
Типовою є логічна помилка під час завдання умови, що може призвести до появи нескінченного циклу. Завершити цикл може лише закриття Access. Щоб уникнути подібних ситуацій, користувач повинен перевірити всі умови, перш ніж запускати макрокоманду.
У разі появи логічних помилок у макросах можлива втрата даних. Логічні помилки неможливо знайти виявлено програмою, їх пошук вимагає участі користувача.
Синтаксичні помилки легко розпізнаються програмою Access, яка видає повідомлення про них.
При цьому відображаються ім'я макросу (полеІм'ямакросу) та макрокоманди (полеІм'я макрокоманди) з синтаксичною помилкою. В областіАргументинаводиться списокаргументів макрокоманди, розділених крапками з комою. Їх слід перевірити, оскільки найчастіше є причиною помилки.
Застосування покрокового режиму.У Access передбачена можливість виконання макросу в покроковому режимі. Для активізації цього режиму призначена командаПо крокахменюВид.У цьому режимі перед виконанням кожної макрокоманди відбувається зупинка, що супроводжується появою діалогового вікнаПокрокове виконання макросу. У цьому вікні наводиться інформація про макрос, про макрокоманду, яка виконуватиметься, і про її аргументи Виконуючи макрос по кроках, легше локалізувати та ідентифікувати помилку.
Якщо як аргумент використовується вираз, що починається знаком рівності, Access обчислює результат і відображає його в поліАргументи.
Діалогове вікно покрокового режиму схоже на діалогове вікно, що з'являється у разі помилки виконання, але у вікні покрокового режиму доступні кнопкиКрокіПродовжити. Перша дозволяє виконати наступну макрокоманду, а друга – всі наступні кроки без зупинок. тобто. вимкнути покроковий режим.
Об'єднання макросів в макрогрупу.Для роботи з одним об'єктом бази даних можуть знадобитися десятки макросів, кожен з яких автоматизує певний процес. Такі макроси можна розробити окремо та запускати по черзі. Однак всі макроси, призначені для обробки одного об'єкта, доцільно об'єднати в групу, надавши їм унікальні, в межах групи, імена. Об'єднані групи макроси доступні в одному вікні макросу (стовпецьІм'я макросуповинен відображатися).
- Відкрити вікно конструктора макросу, в яке повинні бути поміщені макроси, що групуються.
- Клацніть на кнопціІм'ямакросу(на ній зображені літери xyz) або активізувати командуІм'я макросуз менюВигляд,щоб відобразити на екрані стовпецьІм'я макросу.
- У першу комірку стовпцяІм'я макросуввести ім'я першого макросу.
- У комірки стовпцяМакрокомандаввести макрокоманди, що становлять тіло проектованого макросу.
- Активізувати наступний вільний рядок та в поліІм'я макросуввести ім'я другого макросу. Між макросами можна залишити порожні рядки, що підвищить їх легкість читання.
- Написати інші макроси і зберегти макрогрупу за допомогою командиЗберегти якз менюФайл, поставивши ім'я.
Спосіб виклику макросу, що входить до макрогрупи, відрізняється від способу виклику окремо збереженого макросу. В результаті клацання на кнопціЗапусквиконується лише перший макрос макрогрупи. Те саме відбувається при спробі запустити макрогрупу шляхом подвійного натискання на її імені у вікні бази даних.
Виклик макросу з макрогрупи здійснюється шляхом вказівки точних імен макрогрупи та макросу у групі. Ці імена поділяються точкою. Якщо макрогрупа у вікні бази даних має ім'яВсі макроси,а необхідний макрос - ім'яТест1, то для виклику останнього необхідно:
- викликати командуЗапуск макросуз менюСервіс;
- у діалоговому вікні, що відкрилося, ввести текстВсі макроси. Тест1;
- запустити макрос, клацнувши на кнопціОК.
У створену макрогрупу будь-якої миті можна додати нові макроси.
Зв'язування макросів з командами меню.Активізація багатьох команд Access супроводжується вказівкою додаткових даних, що визначають спосіб їх виконання. Для отримання необхідних відомостей Access відкриває діалогове вікно, у якомуКористувач виконує установки.
Автоматизувати ці дії можна шляхом створення відповідних макрокоманд. Деякі з них еквівалентні команд меню. Задати команду меню, яку потрібно виконати, дозволяє макрокомандаВиконатиКоманду. Наприклад, у разі необхідності знайти запис у таблиці, запиті або формі можна скористатися макрокомандоюВиконатиКомандуз аргументомFind.При виконанні цієї макрокоманди відкривається діалогове вікно для вказівки критеріїв пошуку.
Оскільки команда пошуку використовується досить часто, до складу доступних макрокоманд введена макрокомандаЗнайтиЗапис. У списку аргументів цієї макрокоманди - всі елементи діалогового вікна пошуку, яке відкривається за допомогою командиFind.Встановивши значення для цих аргументів на стадії розробки макросу, можна позбавити себе необхідності заповнювати поля діалогового вікна пошуку при виконанні макрокоманди. Звичайно, таким чином можна задавати лише постійні умови пошуку. Для пошуку запису по змінюваному вмісту необхідно використовувати макрокомандуВиконатиКомандуз аргументомFindі з наступним заповненням полів діалогового вікна пошуку, в якому і вказується оригінальне шукане значення.
Події вAccess.У базі даних зберігається інформація про стан її об'єктів. Будь-яка зміна стану форми чи звіту називаєтьсяподією. Кожен із цих об'єктів має свій набір подій.
Оскільки макроси часто потрібно прив'язувати до подій, розробник бази даних повинен мати уявлення про те, які події взагалі існують. Це дозволить скласти план розробки програми і вибрати правильний шлях вирішення завдань користувача — запрограмувати реакцію СУБД надії користувача та забезпечити доступ оператора до інструментів та підпрограм. Можна виділити події, пов'язані з клавіатурою та мишею; події даних; події керування об'єктами; події друку.
Зв'язування макросів з подіями.З подіями зручно пов'язувати макроси. Якщо необхідно виконати макрос під час завантаження бази даних, то цьому макросу необхідно присвоїти ім'яAutoexec(макро з таким ім'ям автоматично виконується під час завантаження бази даних). При цьому можна довільним чином користуватися малими і великими літерами. При кожному відкритті бази даних Access перевіряє, чи є в ній макрос з ім'ямAutoexec, і, якщо знаходить, виконує його. В іншому випадку відкриття бази не супроводжується додатковими діями. Всередині однієї бази даних можна використовувати лише один макросAutoexec.
Якщо ім'яAutoexecнадано макрогрупі, то при відкритті бази даних буде виконано лише перший макрос цієї групи. Щоб при завантаженні бази послідовно виконували кілька макросів, необхідно ввести в макросAutoexecмакрокомандуЗапускМакросу, що дозволить виконати макрос із довільним ім'ям (ім'я задається аргументом) і повернутися до наступної заЗапускМакросумакрокоманді в макросіAutoexec.
МакросAutoexecне виконується, якщо перед відкриттям бази даних натиснути та утримувати клавішу [Shift].
Виконання макросу з умовою.Порядок виконання макрокоманд, що містяться в макросі, визначається умовами, що задаються в стовпціУмова- це логічний вираз, що приймає значенняTrueабоFalse.За допомогою умов здійснюється управління запуском та виконанням макросу.
Ім'я аналізованого умовою поля,що містить пробіл або розділовий знак, слід укладати в квадратні дужки.
Якщо при виконанні певної умови повинні виконуватися кілька макрокоманд, що йдуть один за одним, достатньо записати умову в першому рядку стовпцяУмова,а не повторювати його в кожному рядку. В інших рядках, що підлягають умовному виконанню, слід ввести багатокрапку (. ) в стовпціУмова.