У меня есть макрос, который мне нужно запускать каждые 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

Edit1: я также добавил следующую строку кода прямо перед Call PopulateData, и в 13:00 он не печаталсятот.По какой-то причине кажется, что когда он запланирован к запуску, он не вводит этот оператор If, но когда я перебираю код, он вводится просто нормально.Любые мысли о том, что может быть не так с этим оператором If?
Debug.Print "Entered Execution Block"
Редактировать: Возможно ли, что, поскольку у меня есть UpdateCaller в объекте ThisWorkbook и фактическая PopulateDate в модуле 1, это вызывает проблему?