倒计时无法取消

时间:2019-01-17 12:18:25

标签: excel vba

我在UserForm中建立了一个5分钟的小倒计时。 倒数应该倒数。但是,如果关闭了用户窗体,则宏应该停止并且计时器应该重置。

在UserForm的Terminate事件中,我存储了我自己的中止函数的调用。这将终止用户窗体,但计时器将继续在后台运行,并且始终将相应的宏置于前台。

如何在关闭用户窗体时修改代码以停止计时器?

模块1

Dim Count As Date
Sub callBreak()
    Break.Show
End Sub

Sub Time()
    Count = Now + TimeValue("00:00:01")
    Application.OnTime Count, "minus"
End Sub

Sub minus()
    Dim y As Date
    y = Break.Label1.Caption
    y = y - TimeSerial(0, 0, 1)
    Break.Label1.Caption = y
    If y <= 0 Then
        Break.Label1.Caption = "Arbeit, Arbeit!"
        Exit Sub
    End If
    Call Time
End Sub

Sub abord()
    End
End Sub

用户表单

Sub UserForm_Initialize()
    Call Coffeebreak.Time
End Sub

Sub UserForm_Terminate()
    Call Coffeebreak.abord
End Sub

2 个答案:

答案 0 :(得分:2)

您可以通过将Application.OnTime的可选Schedule参数设置为False来取消先前计划的过程。尝试将其作为Abord()函数:

Sub Abord()
    Application.OnTime EarliestTime:=Count, Procedure:="minus", Schedule:=False
End Sub

答案 1 :(得分:2)

一种解决方案: 在您的模块中,定义一个全局布尔变量,例如isCancelled。在true中将此变量设置为abort,并在minus中对其进行检查,以防止再次调用计时器。

Dim Count As Date
Dim isCancelled as Boolean

Sub Time()
    isCancelled = False
    Count = Now + TimeValue("00:00:01")
    Application.OnTime Count, "minus"
End Sub

Sub minus()
    if isCancelled Then Exit Sub
    (...)
End Sub

Sub abort()
   isCancelled = True
End Sub