VBA на время отменить планирование
Я написал макрос, который запускается в 15:30 каждый рабочий день, когда книга впервые открывается. Когда рабочая книга закрывается, она пытается открыть себя при следующем запуске макроса. Я попытался включить планировщик в false и получаю сообщение об ошибке. Код ниже. У кого-нибудь есть идеи, почему это не работает?
Спасибо
Private Sub Workbook_Open()
Application.OnTime TimeValue("15:30:00"), "MacroTimeTest"
End Sub
public dtime as date
Sub MacroTimeTest()
dtime = (Format(Application.Evaluate("workday(today(), 1)"), "DD/MM/YY") & " " & TimeValue("15:30:00"))
'other code has been deleted doesn't affect dtime variable
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'I have tried replacing false with 0 etc but it didn't make a difference
Application.OnTime earliesttime:=dtime, procedure:="MacroTimeTest", schedule:=False
End Sub
1 ответ
Я думаю, что вы должны сохранить ссылку на время, чтобы вы могли отменить действие. Вы можете отменить действие, только если оно еще не выполнено.
В ThisWorkbook
введите следующее, чтобы запустить макрос в 15:59, пока лист не будет закрыт
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error GoTo CouldNotCancel
Application.OnTime dTime, "MacroTimeTest", , False
Debug.Print "Cancelled task to run at " & dTime
Debug.Print "Workbook close"
Exit Sub
CouldNotCancel:
Debug.Print "No task to cancel"
End Sub
Private Sub Workbook_Open()
Debug.Print "Workbook open"
dTime = TimeValue("15:59:00")
Debug.Print "Next run time " & dTime
Application.OnTime dTime, "MacroTimeTest"
End Sub
Затем добавьте свой макрос в модуль
Option Explicit
Public dTime As Date
Public Sub MacroTimeTest()
'schedule next run
dTime = TimeValue("15:59:00")
'schedule next run
Debug.Print "Scheduling next run at " & dTime
Application.OnTime dTime, "MacroTimeTest"
Debug.Print "Running macro"
End Sub
Таким образом, то же значение dTime
будет использоваться для отмены запланированного задания, которое использовалось для его создания.
Если никакая дальнейшая задача не была запланирована, например, из-за ошибки в MacroTimeTest, то событие закрытия рабочей книги обработает ошибку.
Чтобы увидеть выходные данные отладки, посмотрите на ближайшее окно в редакторе VBA (Ctrl+G)