[VBA] 使用Timer

摘要:[VBA] 使用Timer

Office VBA中並沒有Timer元件供程式設計者使用,若要使用可能就得要呼叫API或是另外再引用Timer元件,

第一招:呼叫WinAPI(相關用法google一下)

Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long

第二招:引用timer元件

檔案來源為以下說明請參閱http://chijanzen.net/wp/OnTime.rar?p=229

安裝 VBATimer 控件

下載檔案
將附件內的檔案解壓縮到同一個資料夾內
開啟InstallVBATime.xls檔案
執行工作表中的 Register 按鈕,程式會自動幫您註冊
只要註冊一次,日後就能使用該控件了(除非您電腦重灌) VBATimer.zip

ActiveX註冊和反註冊工具——Regsvr32
「regsvr32 [/s] [/n] [/i(:cmdline)] dllname」。其中dllname為ActiveX控件文件名
參數有如下意義:
u——反註冊控件
s——不管註冊成功與否,均不顯示提示框
c——控制台輸出
i——跳過控件的選項進行安裝(與註冊不同)
n——不註冊控件,此選項必須與/i選項一起使用

第三招:內存函數OnTime

根據MSDN所述OnTime 方法,安排一個程序在將來的特定時間執行 (既可為某個日期的指定時間,也可為指定的時間之後)

expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

expression     必選。該運算式傳回 Application 物件。

EarliestTime     必選的 Variant。設定程序開始執行的最早時間。

Procedure     必選的 String。設定要執行的程序名稱。

LatestTime     選擇性的 Variant。程序開始執行的最晚時間。例如,LatestTime 參數設為 EarliestTime + 30,當時間到了 EarliestTime 時,如果由於其他程式處於執行狀態而使 Microsoft Excel 不處於 [就緒][複製][剪下] [尋找] 模式,則 Microsoft Excel 將等待 30 秒讓第一個程序先結束執行。如果 30 秒內 Microsoft Excel 無法回到 [就緒] 模式,則不執行此程序。如果省略該引數,Microsoft Excel 將一直等待到可以執行該程序為止。

Schedule     選擇性的 Variant。如果為 True 則安排一個新的 OnTime 程序。如果為 False 則清除先前設定的程序。預設值為 True

附件已有範例。

例一:

以下範例設定一分鐘後執行AutoRunApp程序,從現在開始計時。

Sub AutoRunApp()啟用OnTime寫法

On Error Resume Next若沒有加這一行會停不下來,小弟Try超久的

…….’程式內容

Application.OnTime Now + TimeValue("00:01:00"), "AutoRunApp"

End Sub

 

例二:

本範例取消前一個範例對 OnTime 的設定。

Sub DisAutoRunApp()停用OnTime寫法,若不停用VBA會一直執行,此指令很重要

On Error Resume Next若沒有加這一行會出錯

Application.OnTime Now + TimeValue("00:01:00"), "AutoRunApp", , False

End Sub

 

例三:

本範例為創造事件停用OnTime

Private Sub Workbook_BeforeClose(Cancel As Boolean)活頁簿在關閉時停用OnTime

Call DisAutoRunApp

End Sub

 

範例下載

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo