Создание событий приложения в Excel VBA
События уровня приложения действуют для всего приложения (в этом справочнике — Excel). Но активировать событие приложения не так просто, как создать события книги или рабочего листа. Но уверяю вас, что это тоже не так сложно. В этой статье мы узнаем, как создать и использовать событие приложения в Excel VBA за несколько простых шагов.
Шаг 1. Создайте объект события в модуле класса
Чтобы создать объект события, нам нужно использовать модуль класса.
-
Вставьте ссылку
: / modules-class-modules-in-vba-vba-class-modules-and-how-to-use-them [class module]
. Назовите его как хотите. Я назвал его MyAppEvents. -
Определите переменную события типа Application с ключевым словом WithEvents.
Private WithEvents myApp As Application
-
Инициализировать это событие в подпрограмме class_initialize ().
В раскрывающемся списке слева выберите курс. После этого в правом верхнем раскрывающемся списке выберите инициализировать.
Private Sub Class_Initialize() Set myApp = Application End Sub
-
Теперь определите события, которые вы хотите использовать. В верхнем левом раскрывающемся списке выберите объект события. Все доступные процедуры обработки событий будут доступны вам в раскрывающемся меню в правом верхнем углу. Выберите, что вам нужно, и определите, что вы хотите делать, когда это событие срабатывает. Image: https: //www.office-skill.site/images/wp-content-uploads-2020-01-Capture-37.jpg [image, ширина = 540, высота = 208]
Я использую событие SheetActivate. Каждый раз, когда пользователь переключается между листами любой открытой книги, отображается имя книги и выбранный пользователем лист.
Private Sub myApp_SheetActivate(ByVal Sh As Object) MsgBox ActiveWorkbook.Name & "-" & Sh.Name End Sub
Вы можете определить здесь столько событий, сколько хотите.
События заработают не сразу. Это был первый шаг.
Поскольку это модуль класса, нам нужно создать из него объект, чтобы активировать события.
Теперь нам нужно только запустить эти события из обычной подпрограммы.
Шаг 2: Создайте подпрограмму запуска события в стандартном модуле
Теперь у нас есть класс событий. Нам просто нужно создать объект этого класса и инициализировать его. Как только мы запустим эту подпрограмму, все определенные события в классе событий начнут работать.
-
Вставить нормальный модуль.
-
Определите переменную созданного вами класса.
Private AppE As MyAppEvents
-
Инициализировать его в подпрограмме. Вы можете называть его как хотите.
Private Sub StartEvents() Set AppE = New MyAppEvents End Sub
-
Запустите этот код с помощью клавиши F5. При желании вы можете назначить этот макрос кнопке на листе, если вы хотите запускать события с листа.
И это сделано. Теперь всякий раз, когда вы будете переключать листы, будет появляться окно сообщения с именем книги и листа, пока открыт код, содержащий книгу.
Было ли это тяжело? Я так не думаю. Дайте мне знать, что вы думаете, в разделе комментариев ниже.
Включение и выключение событий приложения VBA После запуска макроса в обычном модуле он будет срабатывать всегда, пока вы не закроете книгу, содержащую события. Но вы можете захотеть, чтобы они включали и выключали их по своему желанию. Есть два способа сделать это.
Обнулить объект события Установите EnableEvents в значение False
1. Обнуление объекта события
В отдельной подпрограмме установите для объекта события значение Nothing
Private Sub StopEvents() Set AppE = Nothing End Sub
Как только вы запустите этот код, события перестанут работать. Вы можете поместить его в кнопку на листе, чтобы остановить события. Теперь у вас будет две кнопки для запуска и остановки этих конкретных событий. Он просто остановит события, созданные объектом AppE.
2. Установите EnableEvents на False
Второй способ — отключить события. Чтобы все события нельзя было уловить, мы устанавливаем для свойства EnableEvents класса Application значение
Ложь.
Private Sub StopEvents() Application.EnableEvents= False End Sub
Приведенный выше код отключит все события. Даже стандартные события Excel. Они не будут работать, пока вы их снова не запустите. Даже если вы запустите подпрограмму StartEvents () (см. Выше), событие не сработает. Чтобы все события снова заработали, вам нужно снова установить для свойства EnableEvents значение True.
Поэтому, если вы хотите, чтобы ваши события работали каждый раз, когда вы запускаете события, добавьте эту строку кода в подпрограмму.
Private Sub StartEvents() Application.EnableEvents = True Set AppE = New MyAppEvents End Sub
Запуск событий приложения Custome каждый раз при открытии книги Если вы разрабатываете инструмент для конечного пользователя, вы можете захотеть, чтобы события работали автоматически. В этом случае вы можете поместить стартер события в link: / events-in-vba-workbook-events-using-vba-in-microsoft-excel [объект книги]
с событием Workbook_open (), а не в нормальный модуль. Это приведет к инициализации вашего объекта события, как только вы откроете книгу, содержащую события.
Итак, ребята, вот как вы можете использовать событие приложения в Excel. Дайте мне знать, было ли это достаточно пояснительным и помогло вам понять события уровня приложения в Excel VBA в разделе комментариев ниже. Если вам есть что добавить к этому, запишите и это. Вы можете задать свои вопросы, связанные с этой статьей или любой другой темой, связанной с VBA, в разделе комментариев ниже.
Загрузите рабочий файл ниже:
Статьи по теме:
link: / events-in-vba-the-events-in-excel-vba [События в Excel VBA]
| В Excel есть семь типов событий. Каждое событие имеет разный характер. Событие приложения работает на уровне книги. Рабочая тетрадь на уровне листов. Событие рабочего листа на уровне диапазона.
link: / events-in-vba-the-worksheet-events-in-excel-vba [События рабочего листа в Excel VBA]
* | Событие рабочего листа действительно полезно, когда вы хотите, чтобы ваши макросы запускались, когда указанное событие происходит в Лист.
link: / events-in-vba-workbook-events-using-vba-in-microsoft-excel [События книги с использованием VBA в Microsoft Excel]
| События книги работают со всей книгой. Поскольку все листы являются частью рабочей книги, эти события работают и с ними.
link: / events-in-vba-prevent-that-an-automacroeventmacro-executes-using-vba-in-microsoft-excel [Предотвратить выполнение automacro / eventmacro с использованием VBA в Microsoft Excel]
* | Чтобы предотвратить запуск макроса auto_open, используйте клавишу Shift.
link: / events-in-vba-chart-object-events-using-vba-in-microsoft-excel [События объекта диаграммы с использованием VBA в Microsoft Excel]
* | Диаграммы — это сложные объекты, к которым вы прикрепляете несколько компонентов. Для создания событий диаграммы мы используем модуль Class.
Популярные статьи:
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]
| Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.