Мал. 3.14. Запуск користувальницької форми перед додаванням програмного коду
Пора перейти до найбільш лякаючого і разом з тим найцікавішого етапу програмування в VBA - створення програмного коду. Нагадаю, що для нашої з вами програми потрібно створити дві процедури і що вони пов'язані з подіями, що виникають в процесі виконання програми. Перша процедура повинна при появі на екрані форми відобразити потрібне повідомлення, а друга - завершити виконання програми, коли хто-небудь клацне на кнопці ОК.
Щоб надрукувати пов'язаний з формою або одним з її елементів управління програмний код, вам потрібно замість вікна форми відкрити вікно програмного коду цієї форми. Для цього виділіть форму або елемент управління в ній. Для кнопки ОК це зробити найлегше, так чому б не почати саме з неї? Клацніть на кнопці ОК, щоб навколо неї з'явилися маркери зміни розмірів. Тепер для виклику вікна програмного коду скористайтеся одним із наведених нижче способів.
* Вибрати View = Code з меню.
* Клацнути на формі правою кнопкою миші і в контекстному меню вибрати View Code.
У який з'явився при цьому вікні програмного коду повинна вже бути заготовка процедури (рис. 3.15). VBA автоматично створює процедуру для часто використовуваного в разі кнопки події - простого натискання кнопки. Ваша програма використовує цю процедуру, коли хто-небудь клацне на кнопці ОК.
Мал. 3.15. VBA створить таку заготовку процедури, як тільки ви відкриєте вікно програмного коду для кнопки ОК
По суті, ці два рядки програмного коду не роблять нічого - вони просто визначають рамки, що показують VBA, де починається і закінчується процедура. Першим рядком створеного для вас програмного коду буде
Private Sub OKButton_Click ()
У будь-який VBA-процедурі перший рядок програмного коду визначає тип процедури (в даному випадку це процедура .типа Sub, тобто підпрограма) і ім'я процедури. Private і Sub відносяться до ключових слів VBA, тобто до слів і символів, які є частиною мови VBA. Ключові слова мають фіксовані спеціальні значення в VBA, і ви не можете їх використовувати як імена таких об'єктів, як процедури. До речі, різні види процедур в VBA обговорюються в главі 6. В даному випадку VBA пропонує для процедури ім'я OKButton_Click, яке представляє собою комбінацію імені кнопки і типу події.
Останньою рядком автоматично генерується програмного коду буде:
Такий рядком повинні закінчуватися всі процедури типу Sub. Цей рядок повідомляє VBA про те. що виконання процедури пора завершити.
Додавання свого програмного коду
Текстовий курсор буде блимати між цими двома створеними VBA рядками. Надрукувавши лише одну додаткову рядок програмного коду, ми дамо можливість програмі завершити роботу. Ось цей програмний код:
Оператор Unload прибирає вказаний об'єкт з пам'яті. Тут це об'єкт з ім'ям Me, які мають в VBA спеціальний сенс. В даному випадку воно означає форму і весь її програмний код.
Виправлення помилок при введенні програмного коду
Фігурально висловлюючись, завжди, коли ви друкуєте програмний код, за вашою спиною стоїть компілятор VBA. Якщо компілятор виявляє очевидну помилку, ви негайно отримуєте відповідне повідомлення з інформацією про помилку, принаймні в загальних словах. Припустимо, наприклад, що після оператора Unload Me ви надрукували якийсь зайвий символ. Компілятор VBA знає, що Unload Me цілком завершений оператор і за ним в рядку більше нічого не повинно випливати.
Як тільки ви перемістіть точку введення в наступний рядок, компілятор перепише весь неправильний оператор червоним кольором і виділить сторонній символ. Ви отримаєте також повідомлення Compile error. Expected: end of statement (Помилка компіляції. Очікувався кінець оператора).
Компілятор може виявити далеко не всі помилки, допущені вами при друкуванні програмного кола. Коли ви запустите програму, компілятор виявить і інші помилки, але про них ми поговоримо трохи пізніше.
Друга процедура, яка повинна відображати на екрані повідомлення, трохи складніше першої. Ця процедура повинна викликатися при появі форми на екрані. У вікні програмного коду, яке повинно у вас залишитися активним, виконайте наступні кроки.
1. У текстовому полі зліва вгорі вікна програмного коду, в якому до цих пір було написано OKButton, клацніть на стрілці в правому кінці поля.
Після цього відкриється список об'єктів, що мають відношення до форми (рис. 3.16).
Мал. 3.16. У списку, що об'єктів перераховані об'єкти, що мають відношення до форми, якій належить це вікно програмного коду
2. Із списку виберіть UserForm.
VBA створить нову процедуру для події Click (клацання). Ця процедура буде викликана, якщо користувач вашої програми клацне кнопкою миші в будь-якому місці ферми, де немає елементів управління. Нашої з вами програмі така процедура не потрібна, тому поки залиште її.
3. Тепер клацніть на стрілці в кінці текстового поля, що знаходиться праворуч, щоб відкрити список процедур, в якому будуть перераховані всі події, які VBA розпізнає для об'єкта UserForm.
Цей список досить великий, що дає вам можливість зробити свою програму чуйною практично настільки, наскільки захочете (рис. 3.17).
Мал. 3.17. У списку процедур представлені події, які будуть для активного в даний момент об'єкта
4. Виберіть Activate - найперший пункт в списку. Щоб побачити цей пункт, вам доведеться перегорнути список.
VBA сумлінно створить заготівлю процедури UserForm_Activate, яка викликається при завантаженні форми в пам'ять.
5. Якщо вас дратує порожня процедура UserForm_Click, видаліть її, виділивши весь її текст і натисніть клавішу Del.
Цей крок не обов'язковий - відповідний програмний код не принесе ніякої шкоди. Але через те, що цей програмний код не робить нічого корисного, а тільки відволікає, можете сміливо перервати його самотнє життя.
Оскільки заготовка процедури і в цьому випадку, як завжди, створюється автоматично, ви відразу можете зосередитися на її наповненні. Між рядками, які люб'язно запропоновані вам VBA, надрукуйте ще три рядки коду. Результат повинен виглядати наступним чином:
Dim Quote As String Quote = Чи не повторюється таке ніколи:
lblNow.Caption = Quote Format (Now, dddddd, hh ч. mm хв.)
Перша з надрукованих вами рядків
Dim Quote As String
створює змінну з ім'ям Quote і визначає її як строкову, що означає послідовність текстових символів.
Quote = Чи не повторюється таке ніколи:
зберігає текст Чи не повторюється таке ніколи: у щойно створеної змінної Quote. Точно так же, як на уроках алгебри в школі, ви тут використовуєте знак рівності, щоб приписати певне значення змінної. Зверніть увагу на те, що VBA перед закривають лапками доданий пробіл, щоб відокремити текст повідомлення від наступного за ним тексту.
lblNow.Caption = Quote Format (Now, dddddd, hh ч. mm хв.)
містить програмний код, який безпосередньо відображає потрібне повідомлення в формі. Цей рядок починається з ідентифікації елемента управління з ім'ям lblNow як об'єкта, з яким йде робота. Після імені стоїть крапка, що означає, що далі йде властивість об'єкта lblNow - в даному випадку це властивість Caption. Взагалі будь-яку властивість подібно змінної, і його можна змінити під час виконання програми. Тому, щоб змінити установки властивості, в програмному коді використовується знак рівності. Частина, що залишилася рядка визначає повідомлення, яке повинно з'явитися на екрані у вигляді напису.
Першою частиною повідомлення є змінна Quote. Наступний потім знак плюс дає вказівку VBA додати те, що слід далі, до тексту, що зберігається в змінної Quote. У дужках функція Now говорить VBA, що потрібно збігати і дізнатися поточні показання годинника комп'ютера, які постійно відраховують дату і час. Потім функція Format бере цю сиру інформацію і представляє її у вигляді, який зможете прочитати ви. Дивний набір букв в лапках якраз і визначає вил дати і часу на екрані, але тут я не збираюся вдаватися в детальні пояснення з цього приводу - детальну інформацію ви знайдете в главі 11.