让程序在指定的时间后再运行使用Application对象的Ontime方法,可以设置程序的运行计划策略。比如,设置在某个特定时间,或者某段时间后运行程序。
如果需要在经过一段时间后开始执行程序,就可以使用Application.OnTime方法,并结合Now TimeSerial(time)安排经过一段时间(从现在开始计时)之后运行某个过程。
下面的案例,设置5秒后运行myTask过程(从现在开始计时)。
'
' 设置延时执行任务
'
Sub SetDelayedTask()
Application.OnTime Now TimeSerial("00:00:05"), "myTask"
End Sub
Sub myTask()
MsgBoxEx "开始执行程序"
End Sub
定期运行程序以分析数据
也可以指定计划,在一天的特定时间执行程序,例如,在每天早额9点,10点,16点运行分析数据的程序,此时,仍需要使用Application.OnTime,并将发OnTime中的参数设置为具体时间。
下面的案例,就能在每天的9点,16点执行任务myTasks。
'
' 定时任务
'
Sub 执行定时任务()
Application.OnTime TimeValue("09:00:00"), "myTask"
Application.OnTime TimeValue("16:00:00"), "myTask"
End Sub
Sub myTask()
MsgBoxEx "开始执行程序"
End Sub
周期性执行任务
Application.OnTime还可与设置任务每隔一段时间运行一次。
比如,编写一个计划运行程序,使之能够每隔10分钟就提醒用户保存工作簿。
'
' 周期性执行任务
'
Sub SetPeriodicTask()
Application.OnTime Now TimeValue("00:10:00"), "saveWorkbook"
End Sub
Sub saveWorkbook()
If MsgBox("当前文件于10分钟前保存一次。现在要重新保存吗?", vbQuestion vbYesNo) = vbYes Then
ThisWorkbook.Save
End If
' 回调上游过程
SetPeriodicTask
End Sub
取消执行计划
要取消某个任务计划,可以把OnTime方法中的参数Schedule设置为False。
下面的案例中,取消原计划在17:00要执行的任务myTask。
'
' 取消任务计划
'
Sub cancelTask()
Application.OnTime TimeValue("17:00:00"), "myTask", False
End Sub
Sub myTask()
MsgBoxEx "开始执行程序"
End Sub
注意
如果压迫取消多个任务计划,最直接有效的方法是直接关闭Excel。