VBA: Надежное время с Application.OnTime?

Мне нужно запускать большую процедуру (RunLargeSub) каждую секунду, и эта процедура занимает около 0,5 с. В настоящее время я использую Application.OnTime, но не приведет ли это к тому, что RunLargeSub вызывается каждые ~1,5 с? Можно ли это исправить до 1.0s?

Sub Update()
    RunLargeSub
    NextTick = Now + TimeValue("00:00:01")
    Application.OnTime NextTick, "Update"
End Sub


Sub Stop()
    On Error Resume Next
    Application.OnTime NextTick, "UpdateClock", , False
    On Error GoTo 0
End Sub

Вся помощь очень ценится.

1 ответ

Вы объявляете NextTick после RunLargeSub. Вот почему это занимает 1,5 с. Если вы объявите это перед RunLargeSub, это займет ровно 1 с. Но тогда у вас возникнет проблема, если RunLargeSub займет больше 1 с, потому что основная подпрограмма перестанет выполняться. Я не уверен, что onTime принимает доли секунды, но вы можете сделать это:

Sub Update()
    RunLargeSub
    NextTick = Now + TimeValue("00:00:01")/2
    Application.OnTime NextTick, "Update"
End Sub

Он должен запустить RunLargeSub и через полсекунды снова вызовет саб.

Другие вопросы по тегам