← コード一覧へ戻る
実務条件分岐・繰り返し

[Esc]キーでマクロを停止する

Escによる中断をエラー18として受け取り、設定を復元してから終了します。

実行前に確認

  • Windows版Excel向けのキー操作例です。VBEのリセットやEnd文では復元処理を通りません。
  • DoEvents中にExcelの操作が可能になります。待機中にこのマクロを再実行したり、他の操作を重ねたりしないでください。
  • xlDisabledで中断を禁止する例にはしていません。処理内容によってはキー応答が遅れる場合があります。
  • Excel実機での動作は未確認です。コピーした練習用ブックで試してください。

1サンプルコード

Option Explicit

Sub Example7021()
    Dim oldCancel As XlEnableCancelKey
    Dim started As Double
    Dim elapsed As Double
    Dim message As String
    oldCancel = Application.EnableCancelKey
    On Error GoTo Failed
    Application.EnableCancelKey = xlErrorHandler
    started = Timer
    Do
        DoEvents
        elapsed = Timer - started
        If elapsed < 0 Then elapsed = elapsed + 86400
    Loop While elapsed < 10
    message = "10秒経過しました"
CleanUp:
    Application.EnableCancelKey = oldCancel
    MsgBox message
    Exit Sub
Failed:
    If Err.Number = 18 Then
        message = "キー操作で中断しました"
    Else
        message = "エラー:" & Err.Description
    End If
    Resume CleanUp
End Sub

図で見る[Esc]キーでマクロを停止するの流れ

イメージ図

Escによる中断をエラー18として受け取り、設定を復元してから終了します。

  1. 入力・開始時

    EnableCancelKeyの元の設定を保存

  2. 実行する処理

    xlErrorHandlerで10秒待機。Escならエラー18を捕捉

  3. 結果

    中断または時間経過後、元の設定へ戻して終了

Esc中断では復元処理を通ります。VBEリセットやEnd文では復元できません。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
  1. 1

    練習用.xlsmの空の標準モジュール先頭にコード全体を貼ります。Windows版デスクトップExcelを使います。

  2. 2

    Alt+F11でExcel画面へ戻り、Alt+F8→Example7021→[実行]を押します。

  3. 3

    実行中の10秒以内にEscを押して中断を試します。押さない場合も比較します。

  4. 4

    中断メッセージまたは10秒経過のメッセージが表示されます。中断後も処理を再開せず、設定復元を通って終了します。

使っている機能の公式ドキュメント(Microsoft Learn)