つらつら Excel VBA

私の備忘録です。

Application.OnTimeで繰り返し処理

引数を付けるにはシングルクォーテーションでマクロと引数を囲む!
ダブルクォーテーションを2連続で書くのはエスケープ処理という回避方法。ダブルクォ(略)を文字として認識させたい時などに使います。他言語では¥マーク等が使われます。

'抜粋
Procedure:="'AutoReload """ & s & """'"


繰り返し処理つくってみた。

Option Explicit

Public reLoadFlag As Boolean
Public loadCount As Long

Public Sub AutoReLoad(Optional s As String)
    
    If reLoadFlag = False Then Exit Sub
    
    '引数のテスト
    If s = "" Then s = "テスト" Else: s = ""
    
    'EarliestTime 実行予約。必須。2秒後に指定した。
    'Procedure 実行するマクロ。必須。自分自身を指定してみた。
    'LatestTime 待機限界時間指定。未指定で無限待機。3分にしてみた。
    Application.OnTime EarliestTime:=(Now + TimeValue("00:00:02")), _
                    Procedure:="'AutoReload """ & s & """'", _
                    LatestTime:=(Now + TimeValue("00:03:00"))
    
    Call 実行したい処理(s)
    
    'ステータスバーへのメッセージ表示
    Application.StatusBar = "Load " & loadCount & "(" & getHHMMSS & ")"
    
End Sub

'スタート用
Public Sub StartPrg()
    reLoadFlag = True
    loadCount = 0
    Call AutoReLoad
End Sub

'停止用
Public Sub StopPrg()
    reLoadFlag = False
    Application.StatusBar = False 'ステータスバーの開放
End Sub

Public Sub 実行したい処理(s As String)
    loadCount = loadCount + 1
    Debug.Print s '確認用
End Sub

'現在の時刻をHH:MM:SSで取得
Public Function getHHMMSS() As String
    getHHMMSS = Format(Now, "HH:MM:SS")
End Function

以上。