excel - application.ontime 未取消或在后台运行

标签 excel vba ontime

我正在使用 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/

相关文章:

xml - 将 XML 子项导入为 Excel 中的列

vba - 打开工作簿时关闭 Excel 后台错误检查

ontime - 绕过 vba 函数中的最大字符串大小?

vba - 在多个工作表中应用范围修改

范围类的Excel VBA选择方法失败

Excel 连接问题

vba - 找不到任何方法来单击下拉菜单来选择任何更喜欢的项目

javascript - 将 Excel 数据导出到嵌套 JSON

excel - 如何使用 Application.OnTime 在每天设定的时间调用宏,而无需关闭工作簿