close

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

以上這是我取自網路之內容加註並解說如何運用:

http://stackoverflow.com/questions/2319683/vba-macro-on-timer-style-to-run-code-every-set-number-of-seconds-i-e-120-secon

arrow
arrow
    文章標籤
    Excel VBA 自製Timer Timer
    全站熱搜
    創作者介紹
    創作者 桓德 的頭像
    桓德

    南區農漁會電腦小組園地

    桓德 發表在 痞客邦 留言(0) 人氣()