3

Excel でダッシュボードのようなワークブックを設計しており Application.OnTime、Excel VBA のメソッドを使用していくつかのチャートを自動的に表示するルーチンを作成しましたが、ルーチンのデバッグに問題があります。

3 つのスケジュールされたルーチンがあります。1 つ目はチャートのデータのスナップショットを取得し、2 つ目はチャートの表示を開始し、3 つ目は 2 つ目によって開始され、チャートを循環して短時間表示します。

私の主な問題は、ルーチンの最後の実行を追跡することです。Application.OnTime

だから私は2つの質問があります:

Application.OnTime1: Excelからスケジュールされたルーチンを表示する方法はありますか?

2: VBA を使用して反復ルーチンをスケジュールするより良い方法はありますか?

4

1 に答える 1

2

スケジュールされているものを取得する方法を知る方法はありません。OnTime を使用するプログラムをデバッグしていたとき、自分のログを作成して、何がいつスケジュールされたかを確認できるようにしました。

Public Function WriteLog(bSchedule As Boolean) As Boolean

    Dim sFile As String, lFile As Long
    Dim sOutput As String
    Dim bReturn As Boolean

    Const sSOURCE As String = "WriteLog()"

    On Error GoTo ErrorHandler
    bReturn = True

    sFile = Environ("USERPROFILE") & gsLOGPATH & gsTIMERLOG
    lFile = FreeFile

    sOutput = bSchedule
    sOutput = sOutput & "," & gdtNextRun
    sOutput = sOutput & "," & gsSCHEDMACRO
    sOutput = sOutput & "," & Format(Now, "mm/dd/yyyy hh:mm:ss")

    Open sFile For Append As lFile

    Print #lFile, sOutput

    Close lFile

ErrorExit:
    On Error Resume Next
    WriteLog = bReturn
    Exit Function

ErrorHandler:
    bReturn = False
    If bCentralErrorHandler(msMODULE, sSOURCE) Then
        Stop
        Resume
    Else
        Resume ErrorExit
    End If

End Function

これはエラー処理システムを使用しているため、自分で修正するか、エラー処理システムを削除する必要があります。

  • gdtNextRun は、次にスケジュールされた実行のグローバル日付変数です
  • gsSCHEDMACRO は、マクロが実行されるグローバル文字列定数です。
  • bSchedule は、スケジュールを設定しているかスケジュールを解除しているかを記録します。

複数の OnTimes がある場合は、追跡するために配列またはコレクションが必要になります。私のマクロは、実行するようにスケジュールされているかどうかに関係なく、1 つのマクロにすぎなかったので、グローバル変数/定数でうまくいきました。

于 2012-10-08T16:44:21.943 に答える