关闭工作簿后 Excel 函数“Application.OnTime”仍在运行

时间:2021-02-24 19:06:04

标签: excel vba office365

我使用的是 Excel (Office 365)。

这是一个关于我的问题的视频:link

互联网上到处都是这样的例子,人们说当我们将 Schedule 设置为 False 时代码应该可以工作,但遗憾的是这对我没有帮助。

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

  • 如果我在 VBA 编辑器中手动运行函数 stopF,它会正确停止 Application.OnTime
  • 但如果我关闭工作簿,它仍然会打开并继续执行 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

我不知道我还能做什么。

1 个答案:

答案 0 :(得分:0)

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

我保留了整个代码,并添加到 matches = (set(domains_1).intersection(domains_2)) print(matches) 以下代码中:

Module1

重点是:

  • 手动关闭从 ' In Module1: Sub closeWorkbook() Call stopF ThisWorkbook.Close End Sub 调用的 stopF 将起作用
  • 对于从 Workbook_BeforeClose 调用的 vba 关闭 stopF 将起作用。

更详细一点:

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