для програмування стандартного модуля. Це вікно показано на рисунку 7.1. Для занесення процедури в модуль можна скористатися розташованою на панелі інструментів кнопкою Вставити процедуру, яка дозволяє виготовити новий модуль, процедуру або модуль класу (створити власний клас). Вибравши напис Процедура одержимо вікно Додати процедуру, в якому можна вибрати параметри процедури. На рисунку 7.1 (на тлі робочої області редактора) відображено це вікно (вверху зправа), підготовлене до занесення функції Oblik_zarplat. Кожен модуль може містити декілька процедур, тому в цей самий модуль до функції Is_gr_pl додана процедура Zabr_zapys.
Переглянути зміст модулів можна за допомогою кнопок-команд панелі інструментів Project Explorer (Провідник проекту) або Object Browser (Переглядач об’єктів). На рисунку 7.1 вверху зліва та внизу показані відповідні цим кнопкам вікна. Ці вікна дозволяють також перемінювати вікна стандартного модуля і модуля класу.
Для редагування (програмування) події Click кнопки Kwytanc_knopka необхідно відкрити модуль класу форми. Це можна виконати декількома способами:
у вікні редактора VBA за допомогою провідника проекту вибрати Microsoft Class Objects;
у вікні редактора VBA за допомогою переглядача об’єктів вибрати об’єкт Form;
у вікні Властивості кнопки (форми або будь-якого об’єкта форми) вибрати потрібну подію;
у контекстному меню вибрати напис Процедура обробки подій.
Вікно редактора VBA, відкрите для модуля класу, має два поля зі списками вибору імен об’єктів (вверху зліва) та назв відповідних їм подій (вверху зправа). Під час програмування кнопки виберемо з лівого списку напис Kwytanc_knopka, а з правого – Click та відредагуємо програму. Вставити процедуру можна за допомогою відомої вже кнопки Вставити процедуру.
Запускати на виконання стандартний модуль можна за допомогою команди Run (Виконати), розташованої на панелі інструментів редактора VBA, або одноіменної команди меню. На панелі інструментів кнопка команди запуску має вигляд поверненого вправо трикутника. Поряд у вигляді прямокутника розташована кнопка закінчення виконання, яка дозволяє перейти в режим редагування програми при її зупинці через помилку.
Для запуску процедури модуля класу необхідно відкрити форму в режимі перегляду і виконати відповідну подію (натиснути кнопку, активізувати поле і т. д.)
Модуль класу. Є два види класів – MS Access і власні. Класи MS Access служать для утворення вищерозглянених об’єктів, власний клас програміст складає сам. Клас може містити будь-які дані (властивості) і процедури (методи), дозволені мовою VBA. Порядок використання класу не залежить від способу його одержання, він однаковий для будь-якого класу.
Один клас можна записати в один модуль класу, при цьому ім’я модуля є іменем класу. Вікно модуля класу можна відкрити у вікні редактора VBA за допомогою команди Вставити модуль–Модуль класу.
Клас VBA може містити дві спеціальні процедури: Class_Initialize() – конструктор і Class_Terminate() – деструктор. Обидві процедури запускаються автоматично, конструктор – під час утворення об’єкта, деструктор – перед вилученням об’єкта з пам’яті. Для утворення або редагування цих процедур необхідно у вікні модуля класу з поля переглядача об’єктів (General) вибрати напис Class, а у полі Declarations назву потрібної процедури.
Нижче поданий приклад випробування класу Klas, текст якого міститься в модулі класу Klas. Він має одну змінну аа цілого типу і три функції:
конструктор, який видає напис “Конструктор” та ініціалізовує змінну аа числом 1234;
функцію ff, яка видає напис “Функція ff” і повертає подвоєне число аа;
деструктор, який видає напис “Деструктор”.
Стандартний модуль Modul_kl містить одну процедуру Rob_z_klasom(), в якій:
утворюється об’єкт My_Objekt – екземпляр класу Klas;
викликається метод My_Objekt.ff() класу і видається на екран його значення;
звільняється пам’ять, яку займав об’єкт.
Результати виконання програми будуть видані в такій послідовності:
Конструктор
Функція ff
ff=2468
Деструктор
Зміст стандартного модуля Modul_kl:
Option Compare Database
Sub Rob_z_klasom()
Dim My_Objekt As New Klas
MsgBox "ff= " & My_Objekt.ff()
Set My_Objekt = Nothing
End Sub
Зміст модуля класу Klas:
Option Compare Database
Public aa As Integer
Public Function ff() As Integer
MsgBox "Функція ff"
ff = 2 * aa
End Function
Private Sub Class_Initialize()
MsgBox "Конструктор"
aa = 1234
End Sub
Private Sub Class_Terminate()
MsgBox "Деструктор"
End Sub
7.3 Приклади програм для обслуговування БД Орlaty
Приклад 1. Створити програму для перевірки таблиці Oplaty_t на наявність грошей платника, код якого міститься в полі Kod_p форми Oplaty_f , у фонді, код якого міститься в полі Kod_f. Якщо підсумоване значення поля Suma таблиці менше за число, яке запрошене в полі Suma форми, то видати на екран загальну суму, взяту з таблиці, і повідомлення про те, що грошей нестає. Нагадаємо, що перевірку наявності грошей платника потрібно виконувати тоді, коли він хоче забрати їх з фонду. Тоді в полі Suma форми число ставиться зі знаком мінус.
Option Compare Database
Option Explicit
Function Is_gr_pl() As Boolean
Dim b As Boolean, s As Single
Dim aRS As New ADODB.Recordset
Set aRS = New ADODB.Recordset
aRS.Open "Oplaty_t", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
aRS.MoveFirst
s = 0
Do While Not aRS.EOF
b = True
b = b And aRS.Fields(0).Value = Forms![Oplaty_f]![Kod_p]
b = b And aRS.Fields(1).Value = Forms![Oplaty_f]![Kod_f]
If b Then s = s + aRS.Fields(2).Value
aRS.MoveNext
Loop
s = s - [Forms]![Oplaty_f]![Suma]
If s >= Abs([Forms]![Oplaty_f]![Suma]) Then Is_gr_pl = True _
Else Is_gr_pl = False: MsgBox "Нестає грошей, є лише " & Str(Abs(s)) & " грн"
aRS.Close
Set aRS = Nothing
End Function
В цьому прикладі aRS – ім’я набору даних, aRS.MoveFirst – перехід на початок набору даних (таблиці), aRS.Fields(0).Value, Fields(1).Value – значення коду платника і фонду, aRS.Fields(2).Value – значення поля Suma в таблиці Oplaty_t, s – підсумована в таблиці кількість грошей платника в заданому фонді. Мається на увазі, що перед використанням даної програми таблиця Oplaty_t була обновлена даними форми. Тоді з