Устранение неполадок функции Application.OnTime в VBA - PullRequest
0 голосов
/ 29 марта 2019

У меня есть макрос, который мне нужно запускать каждые 30 минут с 18:00 до 230:00 следующего дня каждый день, и я держу лист открытым.

После открытия листа он предназначен для планирования макроса UpdateCaller () на следующие 30 минут.Как только это выполняется, он в основном проверяет, попадает ли текущее время в мои ограничения, если это так, вызовите PopulateData, затем запланируйте на следующие 30 минут период и повторите.

По какой-то причине - я не могу получить фактический вызов PopulateDate для выполнения.Я добавил строки кода debug.print как в макрос worksheet.open, так и в макрос updatecaller, и вывод приведен ниже.Я вижу, что он выводит следующее запланированное время, поэтому я знаю, что он успешно проходит через оба макроса.Кроме того, когда я вхожу в макрос и просто нажимаю F5, он работает правильно и вызывается PopulateData.У меня тоже вчера все работало без проблем.

Я пытался закрыть все листы Excel, кроме этого, перезапустить Excel, перезагрузить компьютер, но, похоже, ничего не работает.

Любые идеи / предложения будут высоко оценены.

Private Sub Workbook_Open()

Dim t As Long
Dim opentime As Date

t = 24 / (30 / 60)
Application.OnTime TimeValue(Format(WorksheetFunction.Ceiling(Now * t, 1) / t, "HH:mm:ss")), "UpdateCaller"

opentime = TimeValue(Format(WorksheetFunction.Ceiling(Now * t, 1) / t, "HH:mm:ss"))
Debug.Print opentime

End Sub

Public Sub UpdateCaller()
    Dim tme As Date
    Dim t As Long

    If TimeValue(Format(Now, "HH:mm:ss")) <= TimeValue("14:30:00") Or TimeValue(Format(Now, "HH:mm:ss")) >= TimeValue("18:00:00") Then
        Call PopulateData
    End If

    t = 24 / (30 / 60)
    tme = TimeValue(Format(WorksheetFunction.Ceiling((Now + TimeValue("00:00:05")) * t, 1) / t, "HH:mm:ss"))
    Debug.Print "Procedure ""UpdateCaller"" will next run at: ", tme

    Application.OnTime tme, "UpdateCaller"
End Sub

enter image description here



Edit1: я также добавил следующую строку кода прямо перед Call PopulateData, и в 13:00 он не печаталсятот.По какой-то причине кажется, что когда он запланирован к запуску, он не вводит этот оператор If, но когда я перебираю код, он вводится просто нормально.Любые мысли о том, что может быть не так с этим оператором If?

Debug.Print "Entered Execution Block"

Редактировать: Возможно ли, что, поскольку у меня есть UpdateCaller в объекте ThisWorkbook и фактическая PopulateDate в модуле 1, это вызывает проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...