すべてのコードを「Timer」モジュールに移動するのはどうですか。
Dim nextTriggerTime As Date
Dim timerActive As Boolean
Public Sub StartTimer()
If timerActive = False Then
timerActive = True
Call ScheduleNextTrigger
End If
End Sub
Public Sub StopTimer()
If timerActive = True Then
timerActive = False
Application.OnTime nextTriggerTime, "Timer.OnTimer", Schedule:=False
End If
End Sub
Private Sub ScheduleNextTrigger()
If timerActive = True Then
nextTriggerTime = Now + TimeValue("00:00:01")
Application.OnTime nextTriggerTime, "Timer.OnTimer"
End If
End Sub
Public Sub OnTimer()
Call MainForm.OnTimer
Call ScheduleNextTrigger
End Sub
これで、メインフォームから呼び出すことができます:
call Timer.StartTimer
call Timer.StopTimer
エラーを防ぐには、次を追加します。
Private Sub UserForm_Terminate()
Call Timer.StopTimer
End Sub
これがトリガーされます:
Public Sub OnTimer()
Debug.Print "Tick"
End Sub