读书人

VBA中施用API函数SetTimer和KillTimer

发布时间: 2013-03-28 10:20:24 作者: rapoo

VBA中使用API函数SetTimer和KillTimer做定时器发生死机现象?
请高手帮忙看看定时器,为啥我在VBE中点击停止运行的按钮后,代码仍然不断的在循环,也就是说VBE调试窗口的停止按钮并没有真正的关掉程序;

这种情况经常会导致有该定时器的程序发生死机或因错误引起的工作簿的关闭。


在模块中的代码如下:

Private Declare Function SetTimer Lib "user32.dll" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public lTimerID As Long
Private Const lDuration = 300


Public Sub Start_Timer()

If lTimerID = 0 Then
lTimerID = SetTimer(0&, 0&, lDuration, AddressOf ontime)
Else
Call Stop_Timer
lTimerID = SetTimer(0&, 0&, lDuration, AddressOf ontime)
End If

End Sub

Private Sub Stop_Timer()
KillTimer 0&, lTimerID
End Sub


Private Sub ontime()

Dim a, b, c

a = 1 + 2

End Sub


在窗体中的代码如下:



Private Sub UserForm_Initialize()

Call Start_Timer

End Sub



当窗体被show出来的时候就开始触发定时器了,我怎么关调试窗口的“终止调试”按钮都没法关掉代码循环。


[解决办法]
Private Declare Function SetTimer Lib "user32.dll" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public lTimerID As Long
Private Const lDuration = 300


Private Sub UserForm_Initialize()
lTimerID = SetTimer(0&, 0&, lDuration, AddressOf ontime)
End Sub

Private Sub UserForm_termanite(Terminate)
KillTimer 0&, lTimerID
lTimerID=0
End Sub


Private Sub ontime()

Dim a, b, c

a = 1 + 2

End Sub

读书人网 >VB

热点推荐