Excel VBA 自製Timer 的運用
今天同事向我請教,如何讓Excel的資料表能自動每隔一段時間,啟動一次某一個欄位資料的排序,我說這要用Timer元件,在VB是可以輕易寫的。Excel VBA我還沒寫過,查了VBA也沒有這個元件。
他上網照所我說的用Exce VBA Timer,果然線上有解說如何變通,有現成的可用,因而為之複製取用來改寫,當埸完成了他的需求。
今晚意興分享,故再找一次,卻不是原先那份資料,寫法有些不同,運用時也不同,差別用兩個程序相互呼叫,不同於自身呼叫的遞回,其中止是用:
Application.OnTime Now + TimeValue("00:00:01"), "Timer", schedule:=False
目的雖然一樣,卻有個缺點,當本身已在背景自動更新資料表資料時,這個用指令來中止那個背景自動更新資料的運行,是有問題的,無法將之停止,因此改用變通的方法解決了。
而今晚查到這個寫法,就沒有上述的問題,因此就拿以下這些內容講解,並將運用說明,希望有助他人使用。
Dim TimerActive As Boolean
'用一個按鈕當啟動鈕,將此程序加上來
Sub StartTimer()
Start_Timer
End Sub
'用一個按鈕當停止鈕,將此程序加上來
Sub StopTimer()
Stop_Timer
End Sub
Private Sub Start_Timer()
TimerActive = True
'取消這一行,是為了減少第一次的等待時間,而直接呼叫Timer()
'Application.OnTime Now() + TimeValue("00:00:03"), "Timer"
Timer
End Sub
Private Sub Stop_Timer()
TimerActive = False
End Sub
Private Sub Timer()
If TimerActive Then
ActiveSheet.Cells(1, 1).Value = Time
'以下可以寫,在啟動Timer後,要做的事件
'例如會隨時異動的資料,每隔一段時間就自動排序一次
'這個排序規則,由自己訂,用錄製巨集產生,再複製程式碼到這個地方
'……………………….
'其他解說
'TimeValue("00:00:03"),系統每次要經過的時間,即間隔時間
'"Timer"是呼叫函式或程序的名稱,是Application.OnTime 附加的參數
'這是一個自己呼叫自己的遞回程序,所以用If TimerActive Then給與停止的條件。
Application.OnTime Now() + TimeValue("00:00:03"), "Timer"
End If
End Sub
以上這是我取自網路之內容加註並解說如何運用: