VBA代碼之三十五:利用VBA代碼實現“定時器”功能

大家好,今日繼續講解我們的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,取消定時設置。

先看下面的代碼窗口:

VBA代碼之三十五:利用VBA代碼實現“定時器”功能

運行窗口:

VBA代碼之三十五:利用VBA代碼實現“定時器”功能

停止窗口:

VBA代碼之三十五:利用VBA代碼實現“定時器”功能

今日內容迴向:

1 OnTime 方法的作用是什麼?

2 EXCEL中定時器是如何實現的?


分享到:


相關文章: