Тема: UserForm_Activate и UserForm_Initialize. Программная логика.

Возможно, вопрос глупый. Но теоретических знаний по VBA как не хватало, так и не хватает.
Вопрос:
Какую функциональную часть кода целесообразно писать в Activate, а какую -- в Initialize?
Я раньше не имел особо времени разбираться и писал почти все, чем подготавливается открытие формы, в Initialize.
И вдруг, когда из другой процедуры проверял Userform.Visible, после чего получил вызов Initialize и, что называется, Unexpected Result :), решил, что многое делаю неправильно.
Кто как делает?
Спасибо.

Re: UserForm_Activate и UserForm_Initialize. Программная логика.

Если я правильно понял (работал вообще только с VBA под Excel, но основные принципы кода вряд ли различются), то кусок справки:

The Activate event occurs when an object becomes the active window. The Deactivate event occurs when an object is no longer the active window.
Syntax
Private Sub object_Activate()
Private Sub object_Deactivate()
The object placeholder represents an object expression that evaluates to an object in the Applies To list.
The Activate event can occur only when an object is visible. A UserForm loaded with Load isn't visible unless you use the Show method.
The Activate and Deactivate events occur only when you move the focus within an application. Moving the focus to or from an object in another application doesn't trigger either event.
The Deactivate event doesn't occur when unloading an object.

Initialize Event
Occurs after an object is loaded, but before it's shown.
Syntax
Private Sub object_Initialize()
The object placeholder represents an object expression that evaluates to an object in the Applies To list.
Remarks
The Initialize event is typically used to prepare an application or UserForm for use. Variables are assigned initial values, and controls may be moved or resized to accommodate initialization data.

Т.е. по факту получается, что событие Initialize выполняется в момент загрузки формы, но еще до того, как она выведена на экран, а Activate - в момент активации в ней т.н. программного фокуса (и, взможно, показа ее на экране), т.е. передачи ей управления.
Наверно (и пусть на меня не обижаются спецы, что влез раньше них), в момент проверки Userform.Visible идет именно передача (пусть на какое-то время) управления форме, т.е. обработка должна быть в Activate, если форма уже загружена, и в Initialize, а потом в Activate.

Re: UserForm_Activate и UserForm_Initialize. Программная логика.

Спасибо.
Когда они вызываются -- это более или менее понятно.
Интересно, как люди делают, т.е. для чего они предназначены, какие операции нужно (в смысле правильно с точки зрения хорошего стиля) клать в одно событие, а какие -- в другое.

Re: UserForm_Activate и UserForm_Initialize. Программная логика.

Ну я понимаю так: в Initialize - все данные для предварительной подготовки формы (ну, например, текстбоксы, чекбоксы и прочая), потом - Show (фактически передача управления Activate).
Если не помог, извини...

Re: UserForm_Activate и UserForm_Initialize. Программная логика.

Инициализация идет один раз за время жизни формы, событие активации может произойти несколько раз - каждый раз когда форма получает фокус, а значит здесь можно отследить что юзер вернулся на форму откуда то. Не имею в виду конкретно АКАД, это вроде как общий принцип.

Re: UserForm_Activate и UserForm_Initialize. Программная логика.

Если вы знакомы с объектно-ориентированным программированием в С++, то Initialize - это аналог конструктора, т.е. процедуры, подготавливающей объект к использованию, инициализирующей его. Таким образом, Initialize может присутствовать в любом объекте, а activate - только в форме.

Re: UserForm_Activate и UserForm_Initialize. Программная логика.

Большое всем спасибо.