Как сделать макрос, который периодически выполняется в Excel? - PullRequest
8 голосов
/ 17 октября 2008

Как периодически выполнять код VBA, полностью автоматизированный?

Ответы [ 4 ]

13 голосов
/ 17 октября 2008

Вы можете использовать Application.OnTime, чтобы запланировать выполнение макроса периодически. Например, создайте модуль с кодом ниже. Вызовите «Включить», чтобы запустить таймер.

Важно остановить работу таймера при закрытии книги: для этого обработайте Workbook_BeforeClose и вызовите «Отключить»

Option Explicit

Private m_dtNextTime As Date
Private m_dtInterval As Date

Public Sub Enable(Interval As Date)
    Disable
    m_dtInterval = Interval
    StartTimer
End Sub

Private Sub StartTimer()
    m_dtNextTime = Now + m_dtInterval
    Application.OnTime m_dtNextTime, "MacroName"
End Sub

Public Sub MacroName()
    On Error GoTo ErrHandler:
    ' ... do your stuff here

    ' Start timer again
    StartTimer
    Exit Sub
ErrHandler:
    ' Handle errors, restart timer if desired
End Sub

Public Sub Disable()
    On Error Resume Next ' Ignore errors
    Dim dtZero As Date
    If m_dtNextTime <> dtZero Then
        ' Stop timer if it is running
        Application.OnTime m_dtNextTime, "MacroName", , False
        m_dtNextTime = dtZero
    End If
    m_dtInterval = dtZero
End Sub

В качестве альтернативы вы можете использовать функции Win32 API SetTimer / KillTimer аналогичным образом.

1 голос
/ 17 октября 2008

Существует метод приложения, который можно использовать для определения времени событий. Если вы хотите, чтобы это происходило периодически, вам придется «перезагружать» таймер после каждого выполнения, но это должно быть довольно просто.

Sub MyTimer()
   Application.Wait Now + TimeValue("00:00:05")
   MsgBox ("5 seconds")
End Sub

-Adam

0 голосов
/ 23 декабря 2008

Я делаю это все время, я использовал метод «OnTime», как показано выше, но он делает машину, на которой вы запускаете код, бесполезной для других целей, потому что Excel работает 100% времени. Вместо этого я использую измененную скрытую книгу и выполняю ее с помощью планировщика задач Windows, а в этой книге workbook_open вызываю макрос из вашей личной книги или открываю и запускаю другую книгу с кодом в ней. После выполнения кода вы можете вызвать функцию application.quit из скрытой книги и закрыть ecxel для следующего запуска. Я использую это для всех моих 15-минутных и ежедневных функций автоматической отчетности.

0 голосов
/ 17 октября 2008

Можно рассмотреть планировщик задач Windows и VBScript.

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