简体   繁体   English

Excel Function 'Application.OnTime' 关闭工作簿后仍在运行

[英]Excel Function 'Application.OnTime' still running after closing the workbook

I am using Excel (Office 365).我正在使用 Excel(Office 365)。

here is a video with my problem: link这是我的问题的视频: 链接

The internet is full of examples where people say that the code should work when we set Schedule to False but sadly that did not help me.互联网上有很多例子,人们说当我们将Schedule设置为False时代码应该可以工作,但遗憾的是这对我没有帮助。

The code should start a cycle using Application.OnTime and stop it before closing the workbook.代码应使用Application.OnTime开始一个循环并在关闭工作簿之前停止它。

  • If I run the function stopF manually, in the VBA Editor, it stops Application.OnTime properly.如果我在 VBA 编辑器中手动运行 function stopF ,它会正确停止Application.OnTime
  • But if I close the workbook, it still opens up and continues executing 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

I don't have a clue what could I do more.我不知道我还能做些什么。

My temporary solution to my question:我对我的问题的临时解决方案:

I left the whole code like it was and added into Module1 following code:我将整个代码保留原样,并将以下代码添加到Module1中:

' In Module1:

Sub closeWorkbook()
    Call stopF
    ThisWorkbook.Close
End Sub

The point is:重点是:

  • for manual closing stopF called from Workbook_BeforeClose will work对于从Workbook_BeforeClose调用的手动关闭stopF将起作用
  • for vba closing stopF called from a module will work.对于从module调用的 vba 关闭stopF将起作用。

A bit more detailed:更详细一点:

  • when a user closes a workbook manually (closes the Excel window) then Workbook_BeforeClose => Call stopF will be triggered and it will stop Application.OnTime properly.当用户手动关闭工作簿(关闭 Excel 窗口)时,将触发Workbook_BeforeClose => Call stopF并正确停止Application.OnTime
  • if I want to close the workbook via code then I do not rely on the Workbook_BeforeClose function (because it doesn't work for this somehow) but I call my new closeWorkbook() function when needed, which does terminate Application.OnTime and then closes the workbook.如果我想通过代码关闭工作簿,那么我不依赖Workbook_BeforeClose function (因为它不适用于此方法)但我在需要时调用我的新closeWorkbook() function,它会终止Application.OnTime然后关闭工作簿。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM