Как использовать Workbook События в VBA
Вы можете запустить свой макрос / фрагмент VBA, когда выбрана конкретная книга, выбран лист в книге, ячейка меняет свое значение, когда происходит двойной щелчок, когда добавляется лист и т. Д. Во всех этих случаях мы используем Обработчик событий книги. Обработчик событий помогает нам запускать код VBA всякий раз, когда происходит определенное событие.
В этой статье мы кратко узнаем о каждом обработчике событий рабочей книги.
Что такое обработчик событий книги? Обработчик событий книги — это подпрограмма, локальная для книги.
Этот код работает только с компонентами книги. Это сама рабочая тетрадь, это листы и диапазоны.
Куда писать код обработчика событий книги?
События книги записываются только в объект книги. Если вы напишете событие книги в каком-то нормальном модуле, ошибки не будет, но они просто не будут работать.
Записать в объект книги. Дважды щелкните по нему или щелкните правой кнопкой мыши и щелкните код просмотра. Будет показана область написания кода.
Как написать код для конкретного события в книге?
Теперь, когда вы находитесь в режиме редактирования, в раскрывающемся меню в верхнем левом углу вы увидите общие. Щелкните раскрывающийся список и выберите книгу. В раскрывающемся списке в правом верхнем углу отображаются все события. Выберите то, что вам нужно, и скелетный код этого события будет написан для вас.
Каждое событие имеет фиксированное имя процедуры. Это зарезервированные имена подпрограмм, которые начинаются с workbook_. Вы не можете использовать их для других подпрограмм (можете, но это будут обычные подпрограммы).
Важно: Каждая подпрограмма из этого списка будет запускаться при указанном событии .
_Один тип процедуры события книги может быть записан только один раз в одной книге. Если вы напишете две одинаковые процедуры обработки событий в одной книге, это приведет к ошибке, и ни одна из них не будет выполнена.
Конечно, ошибка подпрограмм будет неоднозначной ._
Давайте вкратце узнаем о каждом из событий.
-
Событие Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) Это событие запускается, когда мы вносим какие-либо изменения в содержащие листы (без форматирования). Если вы хотите что-то сделать, если на каком-либо листе были сделаны какие-либо изменения, тогда код будет следующим:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'do something Msgbox "done something" End Sub
«Ш» всегда является активным листом. «Цель» всегда является активной ячейкой.
Другой пример: вы можете указать дату и время в Cel, prl B1, если A1 изменится. В этом случае мы используем событие workbook_sheetchange. Код будет выглядеть так:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" Then Range("B1").Value2 = Format(Now(), "hh:mm:ss") End If End Sub
Это будет нацелено только на ячейку A1 на каждом листе, поскольку мы не указали объект «sh».
-
Событие Workbook_Activate () Это событие запускается, когда активируется код события, содержащий книгу. Скелетный код этого события:
Private Sub Workbook_Activate() End Sub
Простой пример показывает имя книги при ее выборе.
Private Sub Workbook_Activate() MsgBox "You are on workbook " & Activeworkbook.Name End Sub
Как только вы войдете в книгу, содержащую этот код, событие запустится, и будет показано сообщение «Вы находитесь на имени книги» (в моем случае — Sheet2).
-
Событие Workbook_Open () Это один из наиболее часто задаваемых вопросов: как запустить макрос, как только книга откроется. Это ответ. Это событие книги запускается, как только книга открывается. В отличие от Workbook_Activate () этот код запускается только один раз, а не каждый раз, когда он активируется.
Private Sub Workbook_Open() 'your code ' End Sub
В приведенном ниже примере события Workbook_Open просто появится приветственное сообщение, когда вы откроете код, содержащий книгу.
Private Sub Workbook_Open() MsgBox "Welcome to the Master File" End Sub
-
Событие Workbook_Deactivate () Это событие запускается при выходе из кода, содержащего книгу. Другими словами, если вы хотите что-то сделать, например скрыть листы или что-то еще, когда вы переключаете книгу, используйте это событие VBA. Синтаксис:
Private Sub Workbook_Deactivate() 'your code ' End Sub
В приведенном ниже примере события Workbook_Deativate просто появится сообщение о том, что вы покинули мастер-лист, когда вы покинете этот лист.
Private Sub Workbook_Deactivate() MsgBox "You Left The Master Sheet" End Sub
-
Событие Workbook_BeforeClose () Это событие запускается, когда вы подтверждаете удаление события VBA, содержащего лист. Синтаксис прост:
Private Sub Workbook_BeforeClose(Cancel as Boolean) End Sub
Для параметра Отмена можно задать значение true, если вы хотите, чтобы книга оставалась открытой.
В приведенном ниже коде вас спросят, хотите ли вы сохранить содержимое книги о закрытии.
Private Sub Workbook_BeforeClose(Cancel as Boolean) ans = MsgBox("Do you want to save the content of this workbook?", vbYesNo) If ans = True Then thisworkbook.save End If End Sub
-
Событие Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean). Это событие запускается перед сохранением книги. Синтаксис прост:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
SaveAsUI имеет значение True, если в книге есть изменения (не в VBA).
Для параметра Отмена можно установить значение true, если вы хотите, чтобы книга оставалась несохраненной.
В приведенном ниже коде вас спросят, хотите ли вы сохранить содержимое книги о сохранении.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo) If ans = False Then Cancel = True End If End Sub
-
Событие Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Событие Это событие запускается перед сохранением книги. Синтаксис прост:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
Для SaveAsUI установлено значение True, если есть изменение в книге (не в VBA).
Для параметра Отмена можно установить значение true, если вы хотите, чтобы книга оставалась несохраненной.
В приведенном ниже коде вас спросят, хотите ли вы сохранить содержимое книги о сохранении.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo) If ans = False Then Cancel = True End If End Sub
-
Событие Workbook_NewSheet (ByVal Sh As Object) Это событие возникает, когда вы добавляете новый лист в книгу. Синтаксис прост:
Private Sub Workbook_NewSheet(ByVal Sh As Object) End Sub
Sh — это листовой объект. Тип фактически является основным объектом, поэтому, если мы добавим лист диаграммы, лист макроса или лист диалога, событие все равно будет работать.
Приведенный ниже код добавит и покажет имя добавляемого листа.
Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "You added a new sheet. " & Sh.Name End Sub
Есть еще много событий объекта книги. Мы не можем обсуждать их все здесь. Если вы хотите узнать о каком-то конкретном событии, спросите в разделе комментариев ниже. Я надеюсь, что смог объяснить в этой статье основы событий рабочей тетради. Сообщите мне, помогло ли это вам в разделе комментариев ниже.
Статьи по теме:
link: / tips-using-worksheet-change-event-to-run-macro-when-any-change-is-made [Использование события изменения рабочего листа для запуска макроса при любом изменении]
| Итак, чтобы запускать ваш макрос всякий раз, когда лист обновляется, мы используем события рабочего листа VBA.
link: / events-in-vba-run-macro-if-any-change-made-on-sheet-range [Запустить макрос, если любое изменение, сделанное на листе в указанном диапазоне]
| Чтобы запустить код макроса при изменении значения в указанном диапазоне, используйте этот код VBA. Он обнаруживает любые изменения, сделанные в указанном диапазоне, и запускает событие.
link: / events-in-vba-simplest-vba-code-to-highlight-current-row-and-column-using [Простейший код VBA для выделения текущей строки и столбца с использованием]
| Используйте этот небольшой фрагмент VBA, чтобы выделить текущую строку и столбец листа.
Популярные статьи:
link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-повышения-продуктивность [50 сочетаний клавиш Excel для повышения производительности]
| Выполняйте свою задачу быстрее. Эти 50 ярлыков сделают вашу работу в Excel еще быстрее.
link: / формулы-и-функции-введение-функции-vlookup [Функция ВПР в Excel]
| Это одна из самых используемых и популярных функций Excel, которая используется для поиска значений из разных диапазонов и листов. link: / tips-countif-in-microsoft-excel [COUNTIF в Excel 2016]
| Подсчитайте значения с условиями, используя эту удивительную функцию. Вам не нужно фильтровать данные для подсчета определенного значения.
Функция Countif важна для подготовки вашей приборной панели.
link: / excel-formula-and-function-excel-sumif-function [Как использовать функцию СУММЕСЛИ в Excel]
| Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.