Шаг 54 - Подробнее о событиях загрузки и выгрузки формы
Форма в VBA это каркас приложения. Как добавлять форму в Ваш проект смотрите "Шаг 15 - Пользовательские формы". В основном события формы по ее инициализации и деинициализации разворачиваются в таком порядке:
Initialize Load Activate Deactivate QueryUnload Unload Terminate
Но форма в VBA и VB различаются. Давайте сравним:
VBA | VB |
---|---|
UserForm_Initialize() | Form_Initialize() |
Нет | Form_Load() |
UserForm_Activate() | Form_Activate() |
UserForm_Deactivate() | Form_Deactivate() |
UserForm_QueryClose(Cancel As Integer,CloseMode As Integer) | Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) |
нет | Form_Unload(Cancel As Integer) |
UserForm_Terminate() | Form_Terminate() |
Получается, что событие Load и Unload в VBA не обрабатываются.
Событие Initialize
Событие Initialize (Инициализация) обычно используется для подготовки к работе приложения или формы UserForm. Переменным присваиваются исходные значения, а положение или размеры элементов управления могут быть изменены для согласования с данными, заданными при инициализации. Это событие появляется до загрузки формы и ее отображения. Это событие появляется во время загрузки формы. Давайте в него напишем код:
Private Sub UserForm_Initialize() MsgBox "UserForm_Initialize" End Sub
А теперь две функции, которые вызывают Load:
Sub Test() Load UserForm1 Call Test2 End Sub Sub Test2() Unload UserForm1 Load UserForm1 End Sub
В результате окно с информацией о инициализации будет на экране два раза. Так же это событие сгенерирует событие Show, так как первый раз для работы с формой ее нужно загрузить. Еще это событие может быть вызвано, если в форме определена функция общего назначения. Вызов этой функции опять приводит к загрузке формы.
Private Sub UserForm_Terminate() End Sub Public Sub MyMessage() MsgBox "MyMessage" End Sub
А вот так можно вызвать:
Sub Test() UserForm1.MyMessage End Sub
Итак, событие Intialize вызывается только один раз для формы перед ее загрузкой.
Событие Load
Нет ее в VBA, а вообще в VB здесь можно что-то сделать перед выводом формы на экран.
Событие Activate и Deactivate
Событие Activate происходит, когда объект становится активным окном. А становится активным окном он может в двух случаях. Это в результате Show, когда форма становится видимой на экране и в результате получения фокуса. Событие Deactivate (Деактивизация) происходит, когда объект более не является активным окном. Эти события генерируются только при переключении между окнами одного приложения. Если вы перейдете в другую программу и вернетесь в Excel, то эти события не будут сгенерированы.
Событие QueryClose
Это событие генерируется для того, чтобы получить у пользователя разрешение на закрытие формы. В зависимости от кода возврата форма закрывается или нет.
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode <> 1 Then Cancel = 1 UserForm1.Caption = "Close не будет работать. Выберите меня!" End IF End Sub
Событие Unload
Нет его, точно так же как и Load, а вообще используется, если надо что-либо делать при выгрузке формы, например сохранить настройки пользователя.
Событие Terminate
Данное событие происходит, когда все ссылки на экземпляр объекта удаляются из памяти с помощью присвоения всем переменным, которые ссылаются на данный объект, состояния Nothing или когда последняя ссылка на объект выходит за пределы области определения. Это событие идет вслед за Unload.
Предыдущий Шаг | Следующий Шаг
Автор Каев Артем.