首页 > 解决方案 > 关闭工作簿后 Excel 函数“Application.OnTime”仍在运行

问题描述

我正在使用 Excel (Office 365)。

这是我的问题的视频:链接

互联网上有很多例子,人们说当我们设置为时代码应该可以工作ScheduleFalse但遗憾的是这对我没有帮助。

Application.OnTime代码应该在关闭工作簿之前使用并停止它的循环。

' In Module1:

Public startingTime  As Double

Sub startF()
    MsgBox "hello"
    startingTime = Now + TimeValue("00:00:10")
    Application.OnTime startingTime, "Module1.startF"
End Sub

Sub stopF()    'HERE IT WORKS GOOD
    On Error Resume Next
    Application.OnTime startingTime, "Module1.startF", , False
End Sub

' In ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Call stopF   'HERE IT DOES NOT WORK GOOD
End Sub

我不知道我还能做些什么。

标签: excelvbaoffice365

解决方案


我对我的问题的临时解决方案:

我保留了整个代码,并添加到Module1以下代码中:

' In Module1:

Sub closeWorkbook()
    Call stopF
    ThisWorkbook.Close
End Sub

重点是:

  • stopF对于从调用的手动关闭Workbook_BeforeClose将起作用
  • stopF对于从 a 调用的 vba 关闭module将起作用。

更详细一点:

  • 当用户手动关闭工作簿(关闭 Excel 窗口)时,Workbook_BeforeClose => Call stopF将触发并Application.OnTime正常停止。
  • 如果我想通过代码关闭工作簿,那么我不依赖该Workbook_BeforeClose函数(因为它不适用于此功能),但我closeWorkbook()会在需要时调用我的新函数,它会终止Application.OnTime然后关闭工作簿。

推荐阅读