Події у VBA (Visual Basic for Applications) – це тригери, які спрацьовують під час виконання певних дій користувачем або системою. Вони дозволяють програмам реагувати на зміни у робочих книгах, аркушах, діапазонах даних та навіть формах.
Обробка подій – це важлива частина програмування на VBA, оскільки вона робить код інтерактивним та гнучким.
Основні події VBA
У програмах Microsoft Office існують події, які однаково працюють у всіх програмах. Наприклад, події Open (відкриття документа або книги) та BeforeClose (перед закриттям) доступні як у Word, так і Excel, і дозволяють запускати код при виконанні цих дій.
Але є і унікальні події, які доступні лише в конкретних додатках. Наприклад, подія SheetChange в Excel спрацьовує при зміні значень на аркуші, але така подія відсутня в Word, оскільки в текстовому процесорі немає понять аркушів і комірок. Аналогічно, у Word існують події, пов'язані з обробкою тексту, яких немає в Excel.
Таким чином, одні події є універсальними для всіх програм MS Office, інші залежать від специфіки кожної окремої програми.
Основні події в Excel VBA
- Події робочої книги:
- Workbook_Open – спрацьовує під час відкриття книги.
- Workbook_BeforeClose – спрацьовує перед закриттям книги.
- Workbook_SheetChange – спрацьовує при зміні значень у будь-якому аркуші книги.
- Події аркуша:
- Worksheet_Change – спрацьовує при зміні значень у комірках аркуша.
- Worksheet_SelectionChange – спрацьовує при зміні виділеної області.
Основні події в Word VBA
Document_Close – спрацьовує під час закриття документа. Ця подія корисна для виконання завершальних дій, таких як збереження даних або попередження користувача про незбережені зміни.
Document_New – спрацьовує під час створення нового документа. Використовується для ініціалізації будь-яких даних або налаштування документа на момент його створення.
Document_ContentChange – спрацьовує при зміні вмісту документа, коли користувач додає або видаляє текст, зображення або інші елементи. Ця подія є корисною для контролю за змінами тексту в реальному часі.
Document_ContentControlOnExit – спрацьовує при виході користувача з елемента керування вмістом (наприклад, текстового поля або списку, що розкривається). Ця подія може бути корисною для перевірки або обробки даних, введених у ці елементи.
Document_BeforePrint – спрацьовує перед друком документа. Цю подію можна використовувати для підготовки документа перед друком, наприклад, оновлення полів або додавання позначок.
Document_WindowActivate – спрацьовує, коли активується вікно документа. Корисно для виконання будь-яких дій, коли користувач перемикається між вікнами різних документів.
Document_WindowDeactivate – спрацьовує, коли вікно документа стає неактивним, наприклад, при перемиканні на інше вікно або програму.
Як працюють події в VBA
Обробка подій VBA полягає в написанні спеціального коду, який буде виконуватися, коли відбувається подія. Код міститься в модулі, асоційовані з об'єктами, які можуть ініціювати події, наприклад, у модулі аркушів або книг.
Щоб продемонструвати, як це працює, розглянемо один із популярних прикладів – подію Excel Worksheet_Change.
Приклад: Обробка події зміни комірки
Припустимо, ми хочемо, щоб при зміні значення у будь-якій комірці стовпця A автоматично розраховувалася і записувалася сума всіх значень стовпця A в комірку B1. Для цього:
- Відкрийте редактор VBA (Alt + F11).
- Знайдіть аркуш, для якого потрібно обробити подію (наприклад, Sheet1 або Аркуш1), і відкрийте його модуль.
- Напишіть наступний код:
Private Sub Worksheet_Change(ByVal Target As Range)
' Перевіряємо, чи змінюється комірка в стовпці A
If Not Intersect(Target, Me.Columns("A")) Is Nothing Then
' Якщо так, то перераховуємо суму стовпця A
Dim cell As Range
Dim sumA As Double
sumA = 0
' Проходимо по всіх комірках у стовпці A
For Each cell In Me.Range("A1:A" & Me.Cells(Me.Rows.Count, "A").End(xlUp).Row)
If IsNumeric(cell.Value) Then
sumA = sumA + cell.Value
End If
Next cell
' Записуємо суму в комірку B1
Me.Range("B1").Value = sumA
End If
End Sub
Розбір коду VBA
Target – це параметр, який представляє змінені комірки.
Intersect – метод, який перевіряє, чи знаходиться змінена комірка (або група комірок) всередині заданого діапазону (у нашому випадку стовпця A).
У циклі For Each відбувається перевірка всіх комірок стовпця A, щоб переконатися, що значення є числом, після чого воно додається до змінної sumA.
Після завершення циклу результат записується в комірку B1.
Цей код спрацьовує кожного разу, коли користувач змінює значення у будь-якій комірці стовпця A. Після зміни автоматично оновлюється сума всіх чисел у цьому стовпці.
Навіщо використовувати події в VBA?
Обробка подій корисна, якщо необхідно автоматизувати реакції на дії користувача. Наприклад:
- Оновлення даних під час введення нової інформації.
- Виконання перевірок та попереджень під час введення невірних даних.
- Автоматизація завдань, таких як збереження книги (документа) під час її закриття або перерахунок формул при зміні діапазону.
Рекомендації по роботі з подіями у VBA
- Оптимізація. Деякі події можуть спрацьовувати дуже часто (наприклад, при кожній зміні виділення або зміні комірок). Щоб запобігти уповільненню роботи книги, намагайтеся мінімізувати обсяг коду всередині обробників подій.
- Вимкнення обробки подій. Якщо вам потрібно тимчасово вимкнути події (наприклад, при масових змінах даних), використовуйте таку команду:
Application.EnableEvents = False
Після виконання змін обов'язково увімкніть події назад:
Application.EnableEvents = True
Висновок
Події та їх обробка – це потужний інструмент VBA, який дозволяє створювати інтерактивні та гнучкі рішення в програмах MS Office. За допомогою подій можна значно підвищити продуктивність роботи з даними та автоматизувати багато рутинних завдань.
Ініціювати подію можуть як користувачі, так і програма або операційна система. Кожна подія має дві сторони: дію та відповідь на неї. Саме в цьому полягає основна концепція програмування на VBA. Наприклад, при натисканні на кнопку спрацьовує процедура написана програмістом для обробки цієї дії. Якщо код відсутній або містить помилки, то жодної реакції на подію не буде. Процедури, які реагують на події, називають процедурами обробки подій.
По суті, програмування на VBA – це процес написання коду, який викликає певні реакції на події, будь то безпосередньо чи опосередковано.
Також варто відзначити, що VBA є інтерпретатором і не створює файли, які виконуються (наприклад, exe). Сам програмний код зберігається у вигляді тексту (у форматі Юнікоду) безпосередньо в документі, створеному за допомогою програми, в якій використовується VBA.
Макроси виконуються не дуже швидко, але для більшості завдань автоматизації роботи з документами цієї швидкості вистачає.
