大家好,今日繼續講解我們的VBA代碼第三十五講,利用VBA代碼實現"定時器"功能。
Excel VBA並沒有提供定時器控件,但是用戶可以通過Application對象的OnTime方法實現簡單的定時器功能,應用於Application對象的OnTime方法能夠安排一個過程在將來的特定時間運行,語法如下: expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
參數:
a) expression是必需的,返回一個Application對象。
b) EarliestTime是必需的,設置指定的過程開始運行的時間。使用Now + TimeValue(time)可以安排從現在開始經過一段時間之後運行某個過程,使用TimeValue(time)可以安排在指定的時間運行某個過程。
c) Procedure是必需的,設置要運行的過程名稱。
d) LatestTime是可選的,設置過程開始運行的最晚時間。例如將參數LatestTime設置為EarliestTime+10,當時間到了EarliestTime時如果Excel不處於空閒狀態,那麼Excel將等待10秒,如果在10秒內Excel不能回到空閒狀態,則不運行該過程。如果省略該參數,Excel將一直等待到可以運行該過程為止。
e) Schedule是可選的,如果其值為True(默認值),則安排一個新的OnTime過程,如果其值為False,則清除先前設置的過程。
如下面的代碼所示。
Sub MyStartTimer()
Sheet1.Cells(1, 2) = Sheet1.Cells(1, 2) + 1
Application.OnTime Now + TimeValue("00:00:01"), "MyStartTimer"
End Sub
代碼解析:MyStartTimer過程,使用Application對象的OnTime方法循環調用MyStartTimer過程實現每隔一秒鐘運行一次MyStartTimer過程,從而在B1單元格中不斷地顯示程序累計運行時間,
第2行代碼將B1單元格的值在原有的數字上加1。
第3行代碼使用OnTime方法在1秒後重新調用StartTimer過程,使B1單元格的值不斷的加1,從而顯示程序累計運行時間。
取消定時的代碼如下:
Sub MyEndTimer()
On Error GoTo 100
Application.OnTime Now + TimeValue("00:00:01"), "MyStartTimer", , False
Sheet1.Cells(1, 2) = 0
Exit Sub
100:
MsgBox "請先按[ON]按鈕!"
End Sub
代碼解析:MyEndTimer過程取消MyStartTimer過程的定時。
第2行代碼錯誤處理語句,因為如果還沒有運行MyStartTimer過程而先運行MyEndTimer過程取消定時,程序會提示錯誤,因此使用On Error GoTo Line語句在錯誤發生時執行第7行代碼顯示一個如圖 66 3所示的提示消息框。
第3行代碼將MyStartTimer過程的Schedule參數設置為False,取消定時設置。
先看下面的代碼窗口:
運行窗口:
停止窗口:
今日內容迴向:
1 OnTime 方法的作用是什麼?
2 EXCEL中定時器是如何實現的?
閱讀更多 VBA專家 的文章