首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VBA中施用API函数SetTimer和KillTimer做定时器发生死机现象

2013-03-28 
VBA中使用API函数SetTimer和KillTimer做定时器发生死机现象?请高手帮忙看看定时器,为啥我在VBE中点击停止

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

热点排行