application.ontime не отменяется или работает в фоновом режиме - PullRequest
0 голосов
/ 10 мая 2018

Я использую команду 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 Ответ

0 голосов
/ 10 мая 2018

Вам нужно остановить таймер. Объявите 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
...