Windows定时器vba改变速度

我使用VBA中的Windows定时器API来每0.5秒处理一个子程序。 我希望能够在定时器运行时更​​改timerproc的速度。 不幸的是StartTimer子在开始时只调用一次。 任何想法如何我可以修改我的代码来改变速度(比如0.25)?

Public Declare Function SetTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As Long) As Long Public Declare Function KillTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long) As Long Public TimerID As Long Public TimerSeconds As Single Sub stopTimer() On Error Resume Next KillTimer 0&, TimerID End Sub Sub StartTimer() RerunSpeed = 0.5 TimerSeconds = RerunSpeed TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOf TimerProc) End Sub Sub TimerProc(ByVal HWnd As Long, ByVal uMsg As Long, _ ByVal nIDEvent As Long, ByVal dwTimer As Long) Call RecalculateData End Sub 

对您的代码进行以下修改。

 Public TimerID As Long Public TimerSeconds As Single Public TimerRunning As Boolean Sub stopTimer() On Error Resume Next KillTimer 0&, TimerID TimerRunning = False End Sub Sub StartTimer(Optional RerunSpeed As Double = 0.5) If TimerRunning Then stopTimer TimerSeconds = RerunSpeed TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOf TimerProc) TimerRunning = True End Sub 

您可以使用其他时间间隔对StartTimer子过程进行后续调用。 如果定时器当前处于活动状态,则会暂停并恢复一个新的时间间隔; 例如StartTimer 0.25

通过调用SetTimer创build定时器时,定时器间隔是一劳永逸的。 如果需要修改时间间隔,则需要先通过调用KillTimer重新创build定时器,然后用新的时间间隔重新创buildSetTimer