On Windows and Linux, because of different form system, there make the window envent be fired in different sequence. for userform dialog, there are some listeners can be used. And they are related with toolkit(awt/vclxdialog.cxx and awt/vclxwindow.cxx) and vcl(window/window[2].cxx) module. XTopWindowListener XWindowListener event sequence in Linux after execute is called, windowMoved -> windowResized -> windowShown -> windowOpened -> windowActivated event sequecn in Linux after endExecute is called, windowHidden -> windowClosed event sequence in Windows after execute is called, windowMoved -> windowResized -> windowActivated -> windowShown -> windowOpened(if endExecute be call immediately and doesn't use windowOpened to fire the Vba event, windowOpened will appeared after windowHidden and windowClosed). event sequence in Windows after endExecute is called, windowHidden -> windowClosed. XModeChangeListener do not seend anything when dialog just call dialog.execute. XModeChangeApproveListener not implemented. XAccessibleEventListener will fire STATE_CHANGED, BOUNDRECT_CHANGED and CHILD(will not appear in Windows, if call execute and then call endExecute) event when execute be called. In MSO, userform.show will yield a dialog, and it will grab and lock the focus for current application. and this will make activate event is fired once like a opened(shown) event in OOo. So, we should use windowOpened and windowActivate to ensure the activate event be fired once. It does not only use windowOpened because in Linux windowOpened appeares before the dialog really visible. Windows OOo dialgo execute has some problem: http://www.openoffice.org/issues/show_bug.cgi?id=91038