当使用VBA的Application.OnTime方法将代码安排在未来执行时,有时会发生无法取消已安排的代码的情况。本文提供如何解决此问题的示例代码。
首先,在代码中启动一个OnTime操作:
Sub ScheduleCode()
Application.OnTime EarliestTime:=Now + TimeValue("00:01:00"), Procedure:="CodeToRun"
End Sub
这将在一分钟后执行名为CodeToRun的过程。
接下来,我们将创建另一个宏来取消上面安排的OnTime操作:
Sub CancelScheduledCode()
Dim OnTimeObj as Variant
OnTimeObj = Application.OnTime EarliestTime:=Now + TimeValue("00:01:00"), Procedure:="CodeToRun", Schedule:=False
Debug.Print OnTimeObj
End Sub
此代码将将先前安排的OnTime操作取消,并向用户返回True,表明已成功取消该操作。
请注意,当在不同的代码模块中安排和取消OnTime操作时,可将Procedure参数设置为该子程序名称的字符串,而无需包括模块名称。
使用这个方法,您就可以安排和取消未来代码执行,从而在需要时更精确地控制VBA代码的执行。