double arrow

Шаг 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 здесь можно что-то сделать перед выводом формы на экран.


Сейчас читают про: