VBA-Урок 11.1. События рабочей книги (Workbook Events)

Мы можем иметь события рабочей книги (например, открытие, закрытие и т.д.), которые могут быть триггерами (переключателями) для VBA кода.

Workbook_Open (Открытие книги)

Чтобы выполнить инструкции, когда открывается рабочая книга, идем к ThisWorkbook и выбираем Workbook :

Событие Workbook_Open будет добавлено по умолчанию и будет действовать во время открытия книги:

Private Sub Workbook_Open ()

End Sub

Например, если мы добавим следующую инструкцию, тогда диалоговое окно будет отображено при открытии книги:

Private Sub Workbook_Open()
     MsgBox "Welcome"
End Sub

Workbook_BeforeClose (Событие перед закрытием книги)

Чтобы выполнить инструкции перед самым закрытием книги, выберите BeforeClose

Private Sub Workbook_BeforeClose (Cancel As Boolean)

End Sub

Закрытие книги может быть отменено, если присвоить значение True к переменной "Cancel".

Ниже приведен пример, в котором пользователя спрашивают подтверждение на закрытие рабочей книги:

Private Sub Workbook_BeforeClose (Cancel As Boolean)
      "Если пользователь отвечает NO, то переменная Cancel иметь значение TRUE (которое отменит закрытие рабочей книги)
      If MsgBox ("Вы действительно хотите закрыть эту книгу?", 36, "Подтверждаю") = vbNo Then
          Cancel = True
      End If
End Sub

Workbook_BeforeSave (Событие перед сохранением книги)

Это событие возникает сразу перед самым сохранением рабочей книги:

Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

Сохранение файла может быть отменено присвоением значения True к переменной "Cancel".

Workbook_BeforePrint (Событие перед печатью книги)

Это событие возникает перед самой печатью рабочей книги:

Private Sub Workbook_BeforePrint (Cancel As Boolean)

End Sub

Печать файла может быть отменена присвоением значения True к переменной "Cancel".

Workbook_AfterSave (Событие после сохранения книги)

Это событие возникает сразу после сохранением рабочей книги:

Private Sub Workbook_AfterSave (ByVal Success As Boolean)

End Sub

Workbook_SheetActivate (Событие переключения рабочего листа)

Это событие возникает каждый раз, когда вы переключаетесь между листами рабочей книги:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

End Sub

В этом примере, название активированного листа отображается в диалоговом окне

Private Sub Workbook_SheetActivate (ByVal Sh As Object)
      MsgBox "Name of Sheet:" & Sh.Name
End Sub

Workbook_SheetBeforeDoubleClick (Событие двойного щелчка по ячейке)

Это событие возникает при двойном щелчке на ячейке рабочего листа

Private Sub Workbook_SheetBeforeDoubleClick (ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

End Sub

Например, мы можем использовать это событие, чтобы добавить цвет заливки ячейки, в зависимости от выбранного листа:

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
     If Sh.Name = "Sheet1" Then
         Target.Interior.Color = RGB(255, 108, 0) 'Orange color
     Else
         Target.Interior.Color = RGB(136, 255, 0) 'Green color
     End If
End Sub

Workbook_SheetBeforeRightClick (Событие перед правым кликом)

Это событие возникает перед самым кликом правой кнопки мыши

Private Sub Workbook_SheetBeforeRightClick (ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

End Sub

Workbook_SheetChange (Событие изменения содержания листа)

Это событие возникает каждый раз, когда меняется содержание рабочего листа

Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range)

End Sub

Workbook_SheetCalculate (Событие пересчете листа)

Это событие возникает каждый раз, когда рассчитываются или пересчитываются данные на рабочем листе:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

End Sub

Workbook_SheetSelectionChange (Событие изменения выбранного диапазона ячеек)

Это событие возникает каждый раз, когда меняется содержание выбранного диапазона ячеек на расчетном листе

Private Sub Workbook_SheetSelectionChange (ByVal Sh As Object, ByVal Target As Range)

End Sub

В этом примере, изменяется цвет заливки, если ячейка А1 пуста

Private Sub Workbook_SheetSelectionChange (ByVal Sh As Object, ByVal Target As Range)
If Range ("A1") = "" Then
Target.Interior.Color = RGB (124, 255, 255) 'Blue color
End If
End Sub

Workbook_NewSheet (Событие добавления нового листа)

Это событие возникает каждый раз, когда добавляется новый лист в рабочую книгу:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

End Sub

Workbook_SheetFollowHyperlink (Событие нажатия на ссылку)

Это событие возникает при нажатии на ссылку (гипертекст):

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)

End Sub

Статьи по теме:

  • VBA-Урок 10. Диалоговые окна (Dialog boxes)
  • VBA-Урок 11.2. События рабочего листа (Worksheet Events)