application.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) в случае, если у пользователей открыты другие книги, но нужно попытаться остановить конкретную книгу, работающую в фоновом режиме.

Есть идеи?

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

В объекте Workbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Application.OnTime earliesttime:=EndTime, procedure:="CloseWB", schedule:=False
End Sub
Другие вопросы по тегам