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 SubSub 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
Public TimerEnabled As Boolean
Sub EnableTimer() '開始
TimerEnabled = True
StartTimer
End Sub
Sub DisableTimer() '停用
TimerEnabled = False
End Sub
Sub StartTimer() '注意改代碼需要放在模塊級
If TimerEnabled = True Then
Application.OnTime Now + TimeValue("00:00:01"), "StartTimer" '每1秒鍾自動運行一次
Work '需要每秒運行的代碼
End If
End Sub
Sub Work()
Sheet1.Cells(1, 1) = Sheet1.Cells(1, 1) + 1
End Sub
