Макрос VBA На стиле Таймера для выполнения кодирует каждый определенный номер секунд, т.е. 120 секунд

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

Я действительно не хочу использовать бесконечный цикл со сном, если я могу избежать его.


Править:

Кросспостинг на основе предоставленного ответа в: Excel Приложение VBA. OnTime. Я думаю, что это - плохая идея использовать это... мысли так или иначе?

38
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Да, вы можете использовать для этого Application.OnTime , а затем поместить его в цикл. Это что-то вроде будильника, где вы удерживаете нажатой кнопку повтора, когда хотите, чтобы он снова зазвонил. Следующее обновляет ячейку A1 каждые три секунды со временем.

Dim TimerActive As Boolean
Sub StartTimer()
    Start_Timer
End Sub

Private Sub Start_Timer()
    TimerActive = True
    Application.OnTime Now() + TimeValue("00:00:03"), "Timer"
End Sub

Private Sub Stop_Timer()
    TimerActive = False
End Sub

Private Sub Timer()
    If TimerActive Then
        ActiveSheet.Cells(1, 1).Value = Time
        Application.OnTime Now() + TimeValue("00:00:03"), "Timer"
    End If
End Sub

Вы можете поместить процедуру StartTimer в событие Auto_Open и изменить то, что делается в процедуре Timer (сейчас это просто обновление времени в A1 с ActiveSheet.Cells (1, 1) .Value = Time ).

Примечание : вам понадобится код (помимо StartTimer ) в модуле, а не в модуле рабочего листа. Если он у вас есть в модуле рабочего листа, код требует небольшой модификации.

22
ответ дан 27 November 2019 в 03:18
поделиться

(Это перефразировано из файлов справки MS Access. Я уверен, что в XL есть нечто подобное.) По сути, TimerInterval - это свойство уровня формы. После установки используйте вспомогательный Form_Timer для выполнения намеченного действия.

Sub Form_Load()
    Me.TimerInterval = 1000 '1000 = 1 second
End Sub

Sub Form_Timer()
    'Do Stuff
End Sub
2
ответ дан 27 November 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: