在工作中我们经常需要定时执行某程序, 或者有时需要每隔特定时间执行某个程序, 例如我们需要每 15 分钟执行一次保存的动作, 这个功能在 VBA 中是通过 Application.OnTime 函数来实现的. 这个函数有两个参数, 一个是执行程序的时间, 另一个是要执行的程序名称. 下面来看一代简单代码
- Sub macro1()
- Dim NewTime As Date
- NewTime = Now + TimeValue("00:00:05")
- Application.OnTime NewTime, "Macro2"
- End Sub
- Sub macro2()
- MsgBox "你执行了程序 Macro2"
- End Sub
上面 Macro1 代码的意思是在 5 秒之后执行宏 Macro2, 在 Macro1 中我们定义了一个日期变量 NewTime, 其值是当前时间加上 5 秒, 注意下这里时间的写法,"hh:mm:ss" 时, 分, 秒. 之后用到 application.ontime 函数, 两个参数上面说过了, 一个代表时间, 一个代表要执行的程序. 要想在 5 秒之后执行 Macro2, 你首先要手动运行 Macro1, 这样 5 秒之后才会运行 Macro2, 这点很重要, 不要以为写出了这个代码其就可以自动运行了.
上面只是在特定时间执行某程序, 那现在如果我们要循环执行某程序怎么办? 比如我们每隔 10 秒钟就要执行一次自动保存的动作. 这也好办, 看下面的代码
Sub 自动保存 ()
- Dim NewTime
- NewTime = Now + TimeValue("00:00:05")
- ThisWorkbook.Save
- Application.OnTime NewTime, "自动保存"
- End Sub
在这里我们没有用两个程序, 而是将要执行的代码也嵌入到了 Application.OnTime 程序中, Application.OnTime NewTime, "自动保存", 看到了吧, 我们执行的是程序自身, 每 5 秒调用一下本程序, 运行的时候又设定了 5 秒之后执行本程序, 形成了一个循环, 这就达到了我们定时循环执行某动作的目的.
- Sub hi()
- Debug.Print "hello"
- End Sub
- Sub AutoRun()
- hi
- Application.OnTime Now + TimeValue("00:00:05"), "AutoRun"
- End Sub
上面说过要这些程序首先要手动运行一次, 如果想要打开工作簿就自动执行, 那在 Open 事件中调用一下就可以了
Private Sub Workbook_Open()
Call 自动保存
End Sub
来源: http://www.bubuko.com/infodetail-2909394.html