Oto przykładowy kod VBA, który będzie wywoływał procedurę „MyProcedure” co 15 sekund w środowisku VBA 7:
#If VBA7 Then
Public Sub ScheduleProcedure()
' Uruchom procedurę po raz pierwszy
Call MyProcedure
' Ustaw czas kolejnego wywołania procedury co 15 sekund
Application.OnTime Now + TimeValue("00:00:15"), "MyProcedure"
End Sub
Public Sub MyProcedure()
' Kod procedury
' ...
' Ustaw czas kolejnego wywołania procedury za 15 sekund
Application.OnTime Now + TimeValue("00:00:15"), "MyProcedure"
End Sub
Public Sub CancelScheduledProcedure()
' Anuluj zaplanowane wywołanie procedury
Application.OnTime EarliestTime:=EarliestTime, Procedure:="MyProcedure", Schedule:=False
End Sub
#Else
Public Sub ScheduleProcedure()
' Kod dla wersji VBA niższej niż 7
End Sub
Public Sub MyProcedure()
' Kod dla wersji VBA niższej niż 7
End Sub
Public Sub CancelScheduledProcedure()
' Kod dla wersji VBA niższej niż 7
End Sub
#End If
W powyższym kodzie, najpierw definiujemy trzy procedury: „ScheduleProcedure”, „MyProcedure” i „CancelScheduledProcedure”. W procedurze „ScheduleProcedure” najpierw wywołujemy procedurę „MyProcedure”, a następnie ustawiamy czas kolejnego wywołania procedury za pomocą funkcji „Application.OnTime”. W procedurze „MyProcedure” umieszczamy kod procedury, którą chcemy wykonać co 15 sekund. W ostatniej procedurze „CancelScheduledProcedure” anulujemy zaplanowane wywołanie procedury.
Aby uruchomić pierwsze wywołanie procedury, możesz umieścić kod linii „Call MyProcedure” w procedurze startowej, takiej jak „Workbook_Open” lub „UserForm_Activate”, lub ręcznie wywołać procedurę „ScheduleProcedure” po uruchomieniu arkusza lub formularza.
Ważne jest również, aby zapewnić odpowiednią obsługę błędów i wywołać funkcję „Application.OnTime” z parametrem „Schedule:=False” przed zamknięciem arkusza lub formularza, aby uniknąć problemów związanych z pozostawieniem niezakończonych operacji timera.