Запуск макроса VBA для запуска каждые 45 секунд

Я хочу запустить макрос vba, чтобы он запускался каждую 45-ю секунду. Если он задерживается, он должен начаться снова либо в эту минуту, 45-ю секунду, либо в следующую минуту, 45-ю секунду и т. д. Я написал следующие 2 кода, но его не работает. пожалуйста, направьте

If Format(Now(), "ss") > 45 And Format(Now(), "ss") < 60 Then
         runtime = Now()
         Else
            x = Format(Now(), "ss")
            y = 45 - x
            runtime = Now() + TimeValue("00:00:" & y)
         End If
         Application.OnTime runtime, "testtimer"

или (в приведенном ниже коде здесь несоответствие типов)

 runtime = Now() + TimeValue("00:00:45")
 nextime = runtime + TimeValue("00:00:45")
 Application.OnTime runtime, "testtimer",nextime
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Работа с событием application.onTime всегда немного сложна. Следующий код должен делать то, что вам нужно.

Sub macro_to_run()
    Debug.Print "at macro_to_run", Now
End Sub

Sub timed_procedure()
     
    ' read the position of the second hand from the syetem clock
    Dim secondHand As Byte
    secondHand = Second(Now)
    
    ' schedule this proc to run again either on the 45th second of this minute (if that is in the future)
    ' or the 45th second of the next minute
    If secondHand < 45 Then
            Application.OnTime DateAdd("s", 45 + Minute(Now) * 60 + Hour(Now) * 3600, Date), "timed_procedure"
    Else
            Application.OnTime DateAdd("s", 60 + 45 + Minute(Now) * 60 + Hour(Now) * 3600, Date), "timed_procedure"
    End If
    
    'execute the macro only if the current second is in the allowed window
    If secondHand >= 45 And secondHand <= 50 Then
        macro_to_run
    End If


End Sub

Хорошо и круто, позвольте мне протестировать мой код...

Sst 19.03.2022 15:17

хотя он ответил на небольшое обновление, что если я хочу запустить макрос в начале секунды, например, а не между 45-й секундой, например, 1-й секундой каждой минуты.. Я попытался изменить приведенный выше код, но он запутался

Sst 23.03.2022 09:56

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