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
歡迎分享本文,轉載請註明出處。
歡迎在下面留言,完善本文內容,讓更多的人學到更完美的知識。
TAG:完美Excel |