如何制作一个在Excel中定期执行的宏?

时间:2008-10-17 10:54:13

标签: excel excel-vba vba

如何定期执行某些VBA代码,完全自动化?

4 个答案:

答案 0 :(得分:13)

您可以使用Application.OnTime来安排定期执行的宏。例如,使用下面的代码创建一个模块。调用“启用”以启动计时器运行。

关闭工作簿时停止计时器运行非常重要:这样做可以处理Workbook_BeforeClose并调用“Disable”

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 :(得分:1)

有一种可用于计时事件的应用程序方法。如果你想要定期发生这种情况,你必须在每次执行后“重新加载”计时器,但这应该非常简单。

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

- 亚当

答案 2 :(得分:0)

您可以考虑Windows任务计划程序和VBScript。

答案 3 :(得分:0)

我一直这样做,我曾经使用过如上所示的“OnTime”方法,但它使得运行代码的机器对其他东西无用,因为Excel正在100%运行。相反,我使用修改后的隐藏工作簿,并使用Windows任务计划程序执行,并在thisworkbook中使用workbook_open函数调用您个人工作簿中的宏,或打开并运行其中包含代码的另一个工作簿。代码运行后,您可以从隐藏的工作簿中调用application.quit函数,并关闭ecxel以进行下一次运行。我在15分钟和每天无人值守的报告功能中使用它。