Если я правильно понял (работал вообще только с 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.