Выделено из
Передача значения переменной в системный буфер обмена: слушатели можно использовать в Basic и для реализации CAllback - функций. Пример:
Option Explicit
Dim Counter As Long
' ------------------------------------------------------------------------------------------------------------------
' Вызов CallBack функции, реализованной через слушатель.
' Скорость выполнения программы (1 000 000 Вызовов) - 22 сек
Sub testHandler()
Dim t, nmax As Long, i, oHandler, retval
t = getSystemTicks()
nmax = 1000000 ' число итераций
oHandler=CreateUNoListener("Handler_", "com.sun.star.awt.XEventHandler")
For i = 1 To nmax
retval=oHandler.handleEvent(i) ' вызываем CallBack функцию (параметр имеет тип Variant (any)
Next i
Msgbox nmax & chr(10) & (getSystemTicks - t)
End Sub
' CallBack фукнкция.
Function Handler_handleEvent(Event) As Boolean
Counter=Counter+1
Handler_handleEvent=IIf(Event=0, False, True)
End Function
Довольно шустро, удобно и чуть быстрее (на моей конфигурации процентов на 20), чем вызов Invoke (где, естественно, ссылка на макрос присвоена до цикла).