我正在使用 Application.Ontime 命令在一段时间不活动(10 分钟)后自动关闭电子表格。
以下代码似乎可以正常工作,但是,如果您自己手动关闭工作表,工作簿似乎仍然在后台处于事件状态,并且在最后指定的“结束时间”将自行打开,以便它可以自行关闭。
这在 VBA 代码窗口中也很明显,因为在 CloseWB 宏运行并且 excel 工作簿似乎已关闭后,它仍列在 VBA 项目资源管理器窗口中。
Sub RunTime()
Static EndTime
If Not EndTime = "" Then ActiveWorkbook.Application.OnTime EndTime, "CloseWB", , False
EndTime = Now + TimeValue("00:10:00")
ActiveWorkbook.Application.OnTime EndTime, "CloseWB", , True
End Sub
Sub CloseWB()
Application.DisplayAlerts = False
With ThisWorkbook
.Save
.Close
End With
End Sub
我不想完全关闭 excel (application.quit),以防用户打开其他工作簿但需要尝试停止在后台运行的特定工作簿。
有任何想法吗?
最佳答案
您需要停止计时器。声明 EndTime
作为公共(public)变量,然后在 Workbook_BeforeClose
中关闭计时器事件。
Option Explicit
Public EndTime As Variant
Sub RunTime()
If Not EndTime = "" Then ActiveWorkbook.Application.OnTime EndTime, "CloseWB", , False
EndTime = Now + TimeValue("00:10:00")
ActiveWorkbook.Application.OnTime EndTime, "CloseWB", , True
End Sub
Sub CloseWB()
Application.DisplayAlerts = False
With ThisWorkbook
.Save
.Close
End With
End Sub
在工作簿对象中:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime earliesttime:=EndTime, procedure:="CloseWB", schedule:=False
End Sub
关于excel - application.ontime 未取消或在后台运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50273166/