以下这个程序非常简单来自书本《Excel2010 VBA 入门与提高》第三章疑难58。这个case很容易让初学者觉得和递归有关,其实不然。具体见下。
程序运行效果就是,按start以后A2跳出当前时间,且开始一秒一秒地动。再按end A2就会停下来。
上代码前,需要先放一下Application.OnTime的prototype: Application.OnTime(EarliestTime, Procedure, LatestTime,Schedule)
Procedure对应的位置放入某个要启动的过程(程序)。
EarliestTime对应的位置是这个Procedure要启动的时间。
LatestTime是这个程序如果在EarliestTime没启动,那么Procedure最晚被启动的时间。过了这个时间,程序不会再被启动。
Schedule是逻辑值,为真就是创建某个程序的定时器,为假就是取消EarliestTime所创建的那个定时器。
代码如下,描述也放在了里面:
Dim dNextTime As Date
Sub StartTimer()
dNextTime = DateAdd("s", 1, Now) '设定了earlist time。
Application.OnTime dNextTime, "StartTimer" '初看很像递归,其实它要在下一秒才开呢!!!程序去到下一行代码完全不用一秒钟!!!
Cells(2, 1).Value = Now
End Sub
Sub StopTimer()
Application.OnTime dNextTime, Procedure:="StartTimer", Schedule:=False
End Sub