2021年9月10日 星期五

VBA:application.ontime+TimeValue 使用與取消、設定間隔時間自動執行

 application.ontime基本MDSN解說

基本功能就是讓使用者可以設定一個時間點,自動執行某一程序。

TimeValue  

    字串轉換時間,以 0:00:00 (12:00:00 A.M.) 到 23:59:59 (11:59:59 P.M.) (含) 的時間表示轉換。

基本語法:

Application.OnTime 時間,程序名稱 P.S 程序名稱前後要加上雙引號 單純執行一次: 現在時間往後+10秒後執行TEST程序 RUN_TIME=TimeValue(NOW())+TimeValue("00:00:10") Application.OnTime RUN_TIME,"TEST" 取消: Application.OnTime RUN_TIME,"TEST",FALSE

連續固定間隔時間執行:

圖1.概念

SUB A()

    RUN_TIME=TimeValue(NOW())+TimeValue("00:00:10")

    Application.OnTime RUN_TIME,"TEST"

END SUB

SUB TEST

    DEBUG.PRINT NOW()

    CALL A

END SUB

解說執行a程序後,自目前時間後10秒執行test程序;執行test程序後,再次呼叫a程序做下次定時自動執行設定。

連續固定間隔時間執行,怎取消?

小編測試很多次,但總有不給力的時候。

但以下這方法可以參考參考。

宣告一個全域變數的陣列,很來存放每次執行的時間;以及設定一個步進值控制陣列位置

dim time_array(2000) as string

time_array_add=0

SUB A()

    RUN_TIME=TimeValue(NOW())+TimeValue("00:00:10")

    Application.OnTime RUN_TIME,"TEST"

    '每次執行後就存放時間在陣列內

    time_array(time_array_add)=RUN_TIME

    time_array_add=time_array_add+1

END SUB

SUB TEST

    DEBUG.PRINT NOW()

    CALL A

END SUB

'取消則透過for迴圈取消所有設定過的時間,一勞永逸。

SUB canel_time

    on error resume next

    for i=0 to time_array_add

         Application.OnTime RUN_TIME(i),"TEST",false

    next 

END SUB





沒有留言:

張貼留言

我的雷達:2024/11/15

  似乎有一種不安的味道