銀河鉄道

【VBA高速化】開始と終了のルーチン呼び出し

サムネイル
開始と終了イベント停止と再開

開始・終了・中断

Private calc As Long

'開始
Public Sub StartMacro()
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
        calc = .Calculation
        .Calculation = xlCalculationManual
    End With
End Sub

'終了
Public Sub EndMacro()
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .EnableEvents = True
        .Calculation = calc
        '.Calculation = xlCalculationAutomatic
    End With
    
    'ウェイティングフォームが開いていたら閉じる(必要なら)
    If Frm_waiting.Visible Then Unload Frm_waiting
End Sub

'中断
Public Sub AllEnd()
    Call EndMacro
    End
End Sub

呼び出し側

メインモジュール

Public StartTimer As Double '途中から計測する場合のためにパブリック変数にする
Public Sub Main()
    '開始
    Call StartMacro
    StartTimer = Timer

    '〜メインの実行内容〜

    '途中でマクロ中断する場合
    If (ユーザーフォームでキャンセルボタンが押されたとき等) then
      Call EndAll
    End If

    '終了
    Call EndMacro

    '終了メッセージ
    Dim time As Double: time = Timer - StartTimer
    Call MsgEndMacro(time)
End Sub

実行時間の表示

活用方法

マクロ中断するとき

マクロの途中で再計算するとき

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧