Події VBA

Події та їх обробка у VBA. Урок №42

Події у VBA (Visual Basic for Applications) – це тригери, які спрацьовують під час виконання певних дій користувачем або системою. Вони дозволяють програмам реагувати на зміни у робочих книгах, аркушах, діапазонах даних та навіть формах.

Обробка подій – це важлива частина програмування на VBA, оскільки вона робить код інтерактивним та гнучким.

Основні події VBA

У програмах Microsoft Office існують події, які однаково працюють у всіх програмах. Наприклад, події Open (відкриття документа або книги) та BeforeClose (перед закриттям) доступні як у Word, так і Excel, і дозволяють запускати код при виконанні цих дій.

Але є і унікальні події, які доступні лише в конкретних додатках. Наприклад, подія SheetChange в Excel спрацьовує при зміні значень на аркуші, але така подія відсутня в Word, оскільки в текстовому процесорі немає понять аркушів і комірок. Аналогічно, у Word існують події, пов'язані з обробкою тексту, яких немає в Excel.

Таким чином, одні події є універсальними для всіх програм MS Office, інші залежать від специфіки кожної окремої програми.

Основні події в Excel VBA

  1. Події робочої книги:
    • Workbook_Open – спрацьовує під час відкриття книги.
    • Workbook_BeforeClose – спрацьовує перед закриттям книги.
    • Workbook_SheetChange – спрацьовує при зміні значень у будь-якому аркуші книги.
  2. Події аркуша:
    • 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. Для цього:

  1. Відкрийте редактор VBA (Alt + F11).
  2. Знайдіть аркуш, для якого потрібно обробити подію (наприклад, Sheet1 або Аркуш1), і відкрийте його модуль.
  3. Напишіть наступний код:
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?

Обробка подій корисна, якщо необхідно автоматизувати реакції на дії користувача. Наприклад:

  • Оновлення даних під час введення нової інформації.
  • Виконання перевірок та попереджень під час введення невірних даних.
  • Автоматизація завдань, таких як збереження книги (документа) під час її закриття або перерахунок формул при зміні діапазону.

Рекомендації по роботі з подіями у VBA

  1. Оптимізація. Деякі події можуть спрацьовувати дуже часто (наприклад, при кожній зміні виділення або зміні комірок). Щоб запобігти уповільненню роботи книги, намагайтеся мінімізувати обсяг коду всередині обробників подій.
  2. Вимкнення обробки подій. Якщо вам потрібно тимчасово вимкнути події (наприклад, при масових змінах даних), використовуйте таку команду:
Application.EnableEvents = False

Після виконання змін обов'язково увімкніть події назад:

Application.EnableEvents = True

Main Menu