如何每15分钟自动运行指定VBA宏模块?
问题描述
已完成以下VBA自动化流程:
- Module1:通过文件名匹配技巧,将源文件夹内的文件复制到多个目标文件夹
- Module2:复制完成后,将文件移动至每日归档文件夹
- Module3:通过以下代码串联前两个宏,手动点击按钮即可执行完整流程
Sub Button1_Click() Call moveFilesFromListPartial_A 'Macro1 Call MoveFilesTEST 'Macro2 End Sub
需要实现每15分钟自动运行Module3,无需手动点击按钮。曾尝试用Application.OnTime实现定时,但未成功,代码如下:
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"
解决方案
要实现循环定时执行,需要让定时任务在每次执行后重新注册下一次的定时,具体步骤如下:
- 创建定时触发的主过程
在模块中新建一个过程(比如命名为AutoRunProcess),这个过程会先执行你的完整流程,然后注册下一次的定时任务:
Sub AutoRunProcess() ' 执行完整自动化流程 Button1_Click ' 注册15分钟后的下一次执行 Application.OnTime Now + TimeValue("00:15:00"), "AutoRunProcess" End Sub
- 启动定时任务
你可以通过两种方式启动定时:
- 手动运行一次
AutoRunProcess,之后就会每15分钟自动执行完整流程 - 设置工作簿打开时自动启动,在
ThisWorkbook中添加以下代码:
Private Sub Workbook_Open() ' 打开工作簿1秒后启动定时 Application.OnTime Now + TimeValue("00:00:01"), "AutoRunProcess" End Sub
- 关键注意事项
- 承载VBA的工作簿必须保持打开状态,
Application.OnTime才能正常触发任务 - 如果需要停止定时,必须执行取消代码(否则即使关闭工作簿,Excel可能仍会在后台触发任务),可以新建一个停止过程:
Sub StopAutoRun() On Error Resume Next ' 避免任务不存在时触发报错 Application.OnTime EarliestTime:=Now + TimeValue("00:15:00"), Procedure:="AutoRunProcess", Schedule:=False End Sub
运行这个StopAutoRun即可取消定时任务。
内容的提问来源于stack exchange,提问作者Salman
相关产品推荐
相关产品推荐

