Шаг 54 - Подробнее о событиях загрузки и выгрузки формы

Форма в VBA это каркас приложения. Как добавлять форму в Ваш проект смотрите "Шаг 15 - Пользовательские формы". В основном события формы по ее инициализации и деинициализации разворачиваются в таком порядке:

Initialize
Load
Activate
Deactivate
QueryUnload
Unload
Terminate

Но форма в VBA и VB различаются. Давайте сравним:

VBAVB
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.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.