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