如何定期执行某些VBA代码,完全自动化?
答案 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分钟和每天无人值守的报告功能中使用它。