2

我正在使用 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),以防用户打开其他工作簿但需要尝试停止在后台运行的特定工作簿。

有任何想法吗?

4

1 回答 1

1

您需要停止计时器。声明为公共变量,然后在事件EndTime中关闭计时器。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
于 2018-05-10T15:32:44.880 回答