首页 > 解决方案 > VBA 停止 OnTime 函数

问题描述

有人可以帮我如何停止 OnTime 功能吗?它不像我尝试的那样工作。

Option Explicit

Dim iTimerSet As Double

Public Sub FXKurs_Wahl()
    iTimerSet = Now + TimeValue("00:05:00")
    Application.OnTime iTimerSet, "FXKurs_Wahl"
End Sub


Public Sub EndeUhr()        
    On Error Resume Next
    Application.OnTime iTimerSet, "FXKurs_Wahl", , False    
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)            
    Call EndeUhr    
End Sub

谢谢!

标签: vbaontime

解决方案


如Application.OnTime 方法的文档中所述

设置ScheduleFalse清除先前设置的具有相同ProcedureEarliestTime值的过程。

语法是.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

所以如果你用

Application.OnTime iTimerSet, "FXKurs_Wahl"

要启动它,您需要使用

Application.OnTime EarliestTime:=iTimerSet, Procedure:="FXKurs_Wahl", Schedule:=False

阻止它。请注意,iTimerSet两者的值必须相同。

确保如果您FXKurs_Wahl多次运行,您将需要删除多个OnTime程序。还要确保没有其他代码操纵该iTimerSet值。


如果可能发生FXKurs_Wahl多次运行,请尝试在添加新的之前删除旧的OnTime

Public Sub FXKurs_Wahl()
    EndeUhr 'remove the old one before setting a new one
    iTimerSet = Now + TimeValue("00:05:00")
    Application.OnTime iTimerSet, "FXKurs_Wahl"
End Sub

推荐阅读