當前位置:
首頁 > 最新 > Excel VBA解讀:讓程序在指定的時間運行——OnTime方法

Excel VBA解讀:讓程序在指定的時間運行——OnTime方法

微信公眾號:excelperfect

某些情形下,我們可能需要在指定的時間運行某個程序,Application對象的OnTime方法提供了這樣的功能。

OnTime方法計劃在將來指定的時間運行程序,需要指定想要程序運行的時間和程序名稱。其語法為:

Application.OnTime(EarliestTime,Procedure,[LatestTime],[Schedule])

其中:

參數EarliestTime,必需,指定想要程序在什麼時間運行。

參數Procedure,必需,要運行的程序的名字。

參數LatestTime,可選,指定程序最遲運行的時間。例如,如果參數LatestTime設置為EarliestTime+30,Excel因為在運行另一個程序而在EarliestTime時沒有在準備、複製、剪切或查找模式,那麼Excel將等待30秒以便該程序運行完成。如果Excel在30秒內還不處於準備模式,那麼程序將不再運行。如果忽略該參數,那麼Excel將等待直到能夠運行該程序。

參數Schedule,可選,設置為True來計劃運行一個新的OnTime程序;設置為False來清除之前設置的程序。默認值為False。

使用Now+TimeValue(time)來計劃在特定時間(從現在開始計算)過去多少時間要運行的程序。使用TimeValue(time)來計劃某個特定時間要運行的程序。

下面的代碼在15秒後運行程序my_Procedure:

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

下面的代碼在下午5點運行程序my_Procedure:

Application.OnTimeTimeValue("17:00:00"), "my_Procedure"

下面的代碼取消上面的OnTime設置:

Application.OnTimeEarliestTime:=TimeValue("17:00:00"), _

Procedure:="my_Procedure",Schedule:=False

下面的代碼在2018年7月1日上午6時30分運行程序my_Procedure:

Application.OnTime DateSerial(2018,7,1)+ TimeValue("6:30:00"), "my_Procedure"

與Wait方法不同,OnTime方法在等待運行指定的程序時,允許進行正常的Excel操作,包括運行其他的程序,而Wait方法暫停程序的運行,所有的Excel交互操作都將被掛起。

注意,當使用OnTime方法計劃在將來的某個時間運行程序時,需要確保Excel一直在內存中運行至預定的時間,不需要一直打開包含OnTime方法程序的工作簿,Excel會在需要時自行打開該工作簿。

示例1:設置鬧鐘

下面的代碼在早上6時30分時,發出聲音並顯示一個消息框。

Sub SetColck()

Application.OnTime TimeValue("6:30:00"),"DisplayClock"

End Sub

Sub DisplayClock()

Beep

MsgBox "快起床啦!"

End Sub

示例2:定時刷新數據

下面是Excel 2007 VBA Programmer"sReference中的一個示例。在OnTime方法中,指定程序名字為代碼自身所在程序,則可以實現定時刷新數據,如下面的代碼所示。

Dim mdteScheduledTime As Date

Sub RefreshData()

ThisWorkbook.UpdateLink Name:="C:Data.xlsx", _

Type:=xlExcelLinks

mdteScheduledTime = Now + TimeSerial(0, 1, 0)

Application.OnTime mdteScheduledTime, "RefreshData"

End Sub

Sub StopRefresh()

Application.OnTime mdteScheduledTime, "RefreshData", , False

End Sub

運行程序RefreshData後,該程序將每分鐘執行一次。由於程序中使用了UpdateLink方法更新外部鏈接,因此會定時刷新當前工作簿中的數據。

要停止該程序,運行StopRefresh程序,取消RefreshData程序的運行。

下面是John Walkenbach經典的Excel Power Programming with VBA中的一個類似的例子。在單元格A1中顯示時間,並每隔5秒中更新一次,代碼如下:

Dim NextTick As Date

Sub UpdateClock()

"使用當前時間更新單元格A1中的內容

ThisWorkbook.Sheets(1).Range("A1") = Time

"設置更新時間間隔

NextTick = Now + TimeValue("00:00:05")

Application.OnTime NextTick, "UpdateClock"

End Sub

Sub StopClock()

On Error Resume Next

Application.OnTime NextTick, "UpdateClock", , False

End Sub

歡迎分享本文,轉載請註明出處。

歡迎在下面留言,完善本文內容,讓更多的人學到更完美的知識。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 完美Excel 的精彩文章:

TAG:完美Excel |