Я хочу запустить макрос 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
Работа с событием 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
хотя он ответил на небольшое обновление, что если я хочу запустить макрос в начале секунды, например, а не между 45-й секундой, например, 1-й секундой каждой минуты.. Я попытался изменить приведенный выше код, но он запутался
Хорошо и круто, позвольте мне протестировать мой код...