Получение Workbook.Open для планирования моего макроса каждый день (не только один раз) - PullRequest
0 голосов
/ 28 марта 2019

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

Я пытался использовать Workbook.Open и Application.OnTime для достижения этой цели, но я понимаю, что похоже, что он будет только планировать все 1x. 2-й день ничего не бежало. У меня есть этот код на странице ThisWorkbook VBA.

Как я могу изменить это, чтобы он работал непрерывно в тот час, не закрывая и не открывая заново лист

Private Sub Workbook_Open()
Application.OnTime TimeValue("18:00:00"), "PopulateData"
Application.OnTime TimeValue("18:30:00"), "PopulateData"
Application.OnTime TimeValue("19:00:00"), "PopulateData"
Application.OnTime TimeValue("19:30:00"), "PopulateData"
Application.OnTime TimeValue("20:00:00"), "PopulateData"
Application.OnTime TimeValue("20:30:00"), "PopulateData"
Application.OnTime TimeValue("21:00:00"), "PopulateData"
Application.OnTime TimeValue("21:30:00"), "PopulateData"
Application.OnTime TimeValue("22:00:00"), "PopulateData"
Application.OnTime TimeValue("23:30:00"), "PopulateData"
Application.OnTime TimeValue("00:00:00"), "PopulateData"
Application.OnTime TimeValue("00:30:00"), "PopulateData"
Application.OnTime TimeValue("01:00:00"), "PopulateData"
Application.OnTime TimeValue("01:30:00"), "PopulateData"
Application.OnTime TimeValue("02:00:00"), "PopulateData"
Application.OnTime TimeValue("02:30:00"), "PopulateData"
Application.OnTime TimeValue("03:00:00"), "PopulateData"
Application.OnTime TimeValue("03:30:00"), "PopulateData"
Application.OnTime TimeValue("04:00:00"), "PopulateData"
Application.OnTime TimeValue("04:30:00"), "PopulateData"
Application.OnTime TimeValue("05:00:00"), "PopulateData"
Application.OnTime TimeValue("05:30:00"), "PopulateData"
Application.OnTime TimeValue("06:00:00"), "PopulateData"
Application.OnTime TimeValue("06:30:00"), "PopulateData"
Application.OnTime TimeValue("07:00:00"), "PopulateData"
Application.OnTime TimeValue("07:30:00"), "PopulateData"
Application.OnTime TimeValue("08:00:00"), "PopulateData"
Application.OnTime TimeValue("08:30:00"), "PopulateData"
Application.OnTime TimeValue("09:00:00"), "PopulateData"
Application.OnTime TimeValue("09:30:00"), "PopulateData"
Application.OnTime TimeValue("10:00:00"), "PopulateData"
Application.OnTime TimeValue("10:30:00"), "PopulateData"
Application.OnTime TimeValue("11:00:00"), "PopulateData"
Application.OnTime TimeValue("11:30:00"), "PopulateData"
Application.OnTime TimeValue("12:00:00"), "PopulateData"
Application.OnTime TimeValue("12:30:00"), "PopulateData"
Application.OnTime TimeValue("13:00:00"), "PopulateData"
Application.OnTime TimeValue("13:30:00"), "PopulateData"
Application.OnTime TimeValue("14:00:00"), "PopulateData"
Application.OnTime TimeValue("14:30:00"), "PopulateData"

End Sub

1 Ответ

1 голос
/ 28 марта 2019

Вы можете сделать это намного проще, используя следующее: Поместите следующее в ваш ThisWorkbook

Private Sub Workbook_Open()
    Dim t As Long
    t = 24 / (30 / 60)
    Application.OnTime TimeValue(Format(WorksheetFunction.Ceiling(Now * t, 1) / t, "HH:mm:ss")), "UpdateCaller"
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

Вам нужно будет держать книгу открытой. Если книга закрыта, вы можете использовать планировщик заданий Windows, чтобы открывать ее каждые 30 минут.

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