2015-11-23 41 views
3

我在VBA中使用Windows計時器API來每0.5秒處理一個子計時器。我希望能夠在定時器運行時更​​改timerproc的速度。不幸的是,StartTimer子文件在開始時只調用一次。關於如何修改我的代碼以改變速度(比如說0.25)的任何想法?Windows計時器vba更改速度

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 

回答

2

當您創建通過調用SetTimer計時器計時器間隔指定一勞永逸。如果需要修改時間間隔,則需要先通過調用KillTimer,然後用新時間間隔SetTimer重新創建定時器。

3

對您的代碼進行以下修改。

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