Excel VBA 之定时器 OnTime

当一个系统开始有了定时器(Timer)的时候,它就开始变得“神奇”起来。

定时器 OnTime

Excel 里,可以借助 Application.OnTime实现定时器。

它类似于 JavaScript 里面的setTimeOut函数, 或者 Tcl 里面的 after 命令。

下面的例子实现一个简单的数字时钟,每秒更新一次时间。

Sub TestClock()
  Range("A2").Value = Format(Now, "HH:MM:SS")
  Application.OnTime Now + TimeValue("00:00:01"), "TestClock"
End Sub
  • 第一个参数是定时器触发的时间,是绝对时间,不是相对延迟
    • 通常用TimeValue("00:00:01")来描述相对延迟
    • 或者用Now + TimeValue("00:00:01")来描述绝对时间
  • 第二个参数是需要触发的函数名称

定时器的取消

timer_start = Now + TimeValue("00:00:01")
timer_command = "SomeTask"

Application.OnTime timer_start, timer_command
Application.OnTime timer_start, timer_command, Schedule:=False

通过设置 Schedule:=False 取消具有相同触发时间和回调函数名称的定时器。