[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として受け取り、設定を復元してから終了します。
入力・開始時
EnableCancelKeyの元の設定を保存
実行する処理
xlErrorHandlerで10秒待機。Escならエラー18を捕捉
結果
中断または時間経過後、元の設定へ戻して終了
Esc中断では復元処理を通ります。VBEリセットやEnd文では復元できません。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
練習用.xlsmの空の標準モジュール先頭にコード全体を貼ります。Windows版デスクトップExcelを使います。
- 2
Alt+F11でExcel画面へ戻り、Alt+F8→Example7021→[実行]を押します。
- 3
実行中の10秒以内にEscを押して中断を試します。押さない場合も比較します。
- 4
中断メッセージまたは10秒経過のメッセージが表示されます。中断後も処理を再開せず、設定復元を通って終了します。