1. 程式人生 > >VBA定時執行某程式

VBA定時執行某程式

OnTime 方法
參閱應用於示例特性安排一個過程在將來的特定時間執行(既可以是具體指定的某個時間,也可以是指定的一段時間之後)。

expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
expression      必需。該表示式返回一個 Application 物件。

EarliestTime      Variant 型別,必需。設定過程開始執行的時間。

Procedure      String 型別,必需。設定要執行的過程名。

LatestTime      Variant 型別,可選。過程開始執行的最晚時間。例如,LatestTime 引數設為 EarliestTime + 30,當時間到了 EarliestTime 時,如果由於其他程式處於執行狀態 Microsoft Excel 不處於“就緒”、“複製”、“剪下”或“查詢”模式,則 Microsoft Excel 將等待 30 秒讓第一個過程先結束執行。如果 30 秒內 Microsoft Excel 不能回到“就緒”模式,則不執行此過程。如果省略該引數,Microsoft Excel 將一直等待到可以執行該過程為止。

Schedule      Variant 型別,可選。如果該值為 True,則安排一個新的 OnTime 過程。如果該值為 False,則清除先前設定的過程。預設值為 True。

說明


使用 Now + TimeValue(time) 可安排經過一段時間(從現在開始計時)之後執行某個過程。使用 TimeValue(time) 可安排某個過程只執行指定的時間。

示例
本示例設定 15 秒後執行 my_Procedure 過程,從現在開始計時。

Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

本示例設定 my_Procedure 在下午 5 點開始執行。

Application.OnTime TimeValue("17:00:00"), "my_Procedure"

本示例撤消前一個示例對 OnTime 的設定。

Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
    Procedure:="my_Procedure", Schedule:=False

Sub hi()
   Debug.Print "hello"
End Sub

Sub AutoRun()
  hi
  Application.OnTime TimeValue("14:03:00"), "AutoRun"
End Sub

  

 

在工作中我們經常需要定時執行某程式,或者有時需要每隔特定時間執行某個程式,例如我們需要每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