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)

Другие вопросы по тегам