Q: |
我想在 4:30 PM 自動執行一些程式, 因此利用 Timer 元件的特性, 在 Timer 事件程序中判斷 Time = #04:30:00 PM#, 結果到了 4:30 PM 的時候, 程式卻未被執行?(99/05/03) |
由於 Timer 有延遲發生的現象, 所以當我們用 Timer 來計時時, 要注意 Timer 事件發生的時間可能會不太準確。 假設我們所設定的 Timer 時間間隔是 1 秒鐘, 並且預期 04:29:59 PM 之後發生 Timer 事件的時間是 04:30:00 PM, 那麼極可能因為 Timer 的延遲而使得真正發生的時間變成 04:30:01 PM 或更後面的時間, 所以 Time = #04:30:00 PM# 比較運算式就不會成立, 如果改成:『Time >= #04:30:00 PM#』, 則即使 Timer 略有延遲,依然可以正常執行程式。
Q: |
我想用 Timer 做長時間的定時, 例如 5 分鐘, 但 Interval 屬性值最大只能設定到 65535(大約只有 65 秒), 所以想在 Timer 事件程序中宣告一個 counter 變數以累計計時, 來達成 5 分鐘計時的目的, 是否可行? (99/05/03) |
由於 Timer 有延遲的現象, 所以累計計時將造成更嚴重的延遲, 要比較準確地計時不能完全仰賴 Timer 事件的功能, 以下建議的作法是將 Interval 屬性設定為 1000(= 1 秒), 然後在 Timer 事件程序中讀取『時間差』來判斷是否已經屆滿 5 分鐘, 程式大致如下:
Private Sub Timer1_Timer() Static pre_time As Date ' 5 分鐘的起算點 ' 第一次要設定系統時間給 pre_time If pre_time = 0 Then pre_time = Now ' 從『起算時間』到『現在』是否超過 5 分鐘 If DateDiff("n", pre_time, Now) >= 5 Then MsgBox "Do something" ' 執行您要做的事情 pre_time = Now ' 重新起算 End If End Sub
以上程式中的 DateDiff 函數是以 (Now - pre_time) 來計算時間差,而計算的單位取決於參數一的 "n"(表示分數),所以:
DateDiff( "n", pre_time, Now)等於 Now 與 pre_time 的分數差。