我在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
答案 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