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