如何在Excel中定期执行一个macros?

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

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

当您closures工作簿时,停止计时器运行非常重要:要这样做,请处理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函数。

有一个应用程序方法可以用于计时事件。 如果你想这个定期发生,你将不得不在每次执行后重新加载定时器,但是这应该是非常简单的。

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

-亚当

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

我一直这样做,我曾经使用上面所示的“OnTime”方法,但是它使得您正在运行代码的机器无用于其他事情,因为Excel正在100%的时间运行。 相反,我使用修改后的隐藏工作簿,并使用Windows任务计划程序执行,并在本工作簿中使用workbook_open函数从您的个人工作簿中调用macros,或者打开并运行另一个工作簿。 代码运行后,您可以从隐藏的工作簿中调用application.quit函数,并closures下一次运行的ecxel。 我用15分钟和每天无人值守的报告function。