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

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

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

должны быть предусмотрены только кнопки Пуск и Стоп.

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

Ответы [ 2 ]

2 голосов
/ 28 марта 2011

Google для 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
0 голосов
/ 28 марта 2011

Это будет запускаться 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 - плохая практика, но вы поняли идею.

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