Создание макроса в Excel, который выполняет другой макрос каждые 2 секунды

У меня есть макрос с именем UpdateMacro который обновляет мою базу данных из моего Excel

Я хочу создать макрос RepeatMacro где он автоматически UpdateMacro каждые 2 секунды, и для запуска и остановки выполнения UpdateMacro должны быть предоставлены только кнопки «Пуск» и «Стоп».

Как это можно сделать?

Google for Application.OnTime

Например

 Dim dtNextRunTime As Date dtNextRunTime = Now + TimeSerial(0,0,2) Application.OnTime dtNextRunTime, "MyProcedure", True 

Чтобы очистить ранее установленную процедуру, вам нужно сэкономить время, в которое она была запланирована), например, dtNextRunTime выше), а затем использовать:

 Application.OnTime dtNextRunTime, "MyProcedure", False 

Вот пример модуля VB с методами StartSchedule / StopSchedule, чтобы вы начали:

 Private m_dtScheduledTime As Date Private m_lDelaySeconds As Long Private m_bIsScheduled As Boolean Private Sub DoWork() m_bIsScheduled = False ' ... do your work ' Reschedule at the same frequency once completed StartSchedule m_lDelaySeconds, "DoWork" End Sub Public Sub StartSchedule(ByVal DelaySeconds As Long) StopSchedule m_lDelaySeconds = DelaySeconds m_dtScheduledTime = Now + TimeSerial(0, 0, m_lDelaySeconds) Application.OnTime m_dtScheduledTime, "DoWork", True m_bIsScheduled = True End Sub Public Sub StopSchedule() If m_bIsScheduled Then Application.OnTime m_dtScheduledTime, "DoWork", False m_bIsScheduled = False End If End Sub 

Это будет запускаться UpdateMacro каждые две секунды, если UpdateMacro занимает менее двух секунд для запуска.

 Sub RepeatMacro() Dim lastRunTime Do lastRunTime = Now Range("A1") = "Last run: " & Format(lastRunTime, "hh:nn:ss") Call UpdateMacro DoEvents Application.Wait lastRunTime + TimeValue("00:00:02") Loop End Sub Sub UpdateMacro() Debug.Print "running UpdateMacro" End Sub 

EDIT Чтобы запустить и остановить RepeatMacro со своего листа, сделайте кнопку запуска и кнопку остановки и поместите следующий код в свой модуль Sheet. Также обратите внимание, что я добавил DoEvents в RepeatMacro выше.

 Private Sub StartButton_Click() Call RepeatMacro End Sub Private Sub StopButton_Click() MsgBox "Stopped." End End Sub 

Теперь просто сказать, что End – это плохая практика, но вы получаете идею.

Давайте будем гением компьютера.