office交流網--QQ交流群號

Access培訓群:792054000         Excel免費交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

Excel中定時執行任務或代碼的幾種方法

2017-08-09 13:54:00
zstmtony
翻譯
11344



一、使用Excel自帶的OnTime函數


1)打開Excel 進入vbe編輯器 (可使用Alt+F11組合快捷鍵),插入一個新的模塊(Module),并在模塊中輸入以下代碼:


Public Sub TestSub()
   MsgBox ("Office交流網定時執行任務") '顯示一個提示對話框
End Sub


2)然后給它配上一個計時器,就能讓它在指定的時間自動運行。
Application.OnTime Now + TimeValue("00:00:10"), "TestSub"

這句代碼可以放在Wordbook的 打開Open事件中來觸發

ontime是一個excel函數,所以必須指定application這個對象。now函數是指定當前時間,配合上+號這是運算符,與后面timevalue的值相加。逗號后是調用過程的名稱,使用雙引號引用起來。


運行效果:



二、用API函數來實現(可現毫秒級的計時器)

要借用個Windows 的API函數:SetTimer和KillTimer

前者用于設置定時器,后者用于刪除定時器


Private Declare Function SetTimer Lib "user32.dll" (ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long


聲明lTimerID用于存放定時器的ID
Public lngTimerID As Long

啟動定時器,IDuration是定時器觸發的時間,單位為毫秒
Sub StartTimer(lDuration As Long)
' 如果定時器不存在,則設置定時器,定時器觸發的時間為IDuration,定時器觸發后執行OnTime
If lngTimerID = 0 Then
 lngTimerID = SetTimer(0&, 0&, lDuration, AddressOf OnTime)
 ' 否則停止定時器,并設置一個新的定時器
Else
  Call StopTimer
  lngTimerID = SetTimer(0&, 0&, lDuration, AddressOf OnTime)
End If
End Sub



停止定時器的函數

Sub StopTimer()
   KillTimer 0&, lngTimerID 
End Sub



OnTime函數
Sub OnTime()
' 計時器觸發后運行的代碼放在這
Debug.Print "計時器定時執行了!"
End Sub



三、相關知識:


Application的OnTime函數



安排一個過程在將來的特定時間運行(既可以是具體指定的某個時間,也可以是指定的一段時間之后)。

語法

表達式.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

表達式 一個代表 Application 對象的變量。

參數

名稱

必需/可選

數據類型

說明

EarliestTime

必需

Variant

希望此過程運行的時間。

Procedure

必需

String

要運行的過程名。

LatestTime

可選

Variant

過程開始運行的最晚時間。例如,如果 LatestTime 參數設置為 EarliestTime + 30,且當到達EarliestTime 時間時,由于其他過程處于運行狀態而導致 Microsoft Excel 不能處于“就緒”、“復制”、“剪切”或“查找”模式,則 Microsoft Excel 將等待 30 秒讓第一個過程先完成。如果 Microsoft Excel 不能在 30 秒內回到“就緒”模式,則不運行此過程。如果省略該參數,Microsoft Excel 將一直等待到可以運行該過程為止。

Schedule

可選

Variant

如果為 True,則預定一個新的 OnTime 過程。如果為 False,則清除先前設置的過程。默認值為True

注解

使用 Now + TimeValue(time) 可安排經過一段時間(從現在開始計時)之后運行某個過程。使用 TimeValue(time) 可安排某個過程只運行指定的時間。

EarliestTime 值四舍五入到最接近的下一個值。

Schedule 設置為 false,以清除以前設置的具有相同 ProcedureEarliestTime 值的程序。

示例

本示例設置從現在開始 15 秒后運行 my_Procedure。

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

本示例設置 my_Procedure 在下午 5 點開始運行。

Application.OnTime TimeValue("17:00:00"), "my_Procedure"

本示例撤消前一個示例對 OnTime 的設置。

VBA
Application.OnTime EarliestTime:=TimeValue("17:00:00"), _ 
 Procedure:="my_Procedure", Schedule:=False


相關文章:


VBA系列講座(7):如何在Excel里使用定時器

Access計時器Timer與VB計時器Timer的區別


    分享
    北京十一选五基本走势