VBA技術解説
ユーザーに絶対に停止させたくない場合のVBA設定

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2020-04-01 最終更新日:2021-08-22

ユーザーに絶対に停止させたくない場合のVBA設定


ユーザー操作によりマクロVBAが実行中に停止させられてしまう場合があります。
再実行可能であれば問題ありませんが、途中で強制停止された場合のデータ保証が出来ないと言った場合もあるでしよう。


マクロ実行でも、以下のキーボード操作でVBAは停止できてしまいます。
「Esc」
「Ctrl」+「Break」
これらのキーによりVBAが停止しては困る場合もあります。

以下は、このようなキー操作でVBA実行を停止させられないようにする為のVBA記述です。


ユーザーに絶対に停止させないVBA

今日は4月1日なので、少々おふざけVBAで確認してみましょう。
※言うまでもないですが、実行は自己責任でお願いします。

Sub 止められるものなら止めてみろ()
  Application.Interactive = False
  Application.EnableCancelKey = xlDisabled
  
  Dim i As Long
  For i = 1 To 10
    '以下は適当に入れたもので特段の意味はありません。
    Application.Wait Now() + TimeSerial(0, 0, 1)
    DoEvents
    MsgBox WorksheetFunction.Rept("ムダ!", i)
  Next
  
  Application.Interactive = True
  Application.EnableCancelKey = xlInterrupt
  MsgBox "ムダな悪あがきでしたね!"
End Sub

Application.EnableCancelKey

ユーザーが実行中のプロシージャを中断する Ctrl + Break (または Esc または Command + Period) を処理する方法を制御します。

Application.EnableCancelKey = XlEnableCancelKey
XlEnableCancelKey
xldisabled 割り込みを無視します。
xlErrorHandler このエラーは、On Error GoToステートメントでトラップできます。
エラーコードは18です。
xlInterrupt デバッグ、終了などを行えるように、実行中のプロシージャを停止します。

このプロパティは慎重に使用してください。
xldisabledを使用した場合、キー操作でマクロVBAを中断させることはできません。
同様に、xlErrorHandlerを使用していてもエラーハンドラーが常にResumeステートメントを使用して戻る場合は、停止させることはできません。
マクロ実行が終了した後は、自動的にxlInterruptに設定されます。

Application.Interactive

Microsoft Excel が対話モードの場合はTrue。
通常、このプロパティはTrueです。
このプロパティをFalseに設定すると、キーボードおよびマウスからのすべての入力がブロックされます (コードによって表示されるダイアログボックスへの入力を除く)。

Application.Interactive = True/False

ユーザー入力をブロックすると、ユーザーがExcel オブジェクトを移動したり、アクティブにしたりしても、マクロを妨害することはできません。
マクロの終了前に必ず設定をTrueに戻してください。
マクロ実行が終了しても、このプロパティは自動的にはTrueに戻りません。

解説

「Esc」や「Ctrl」+「Break」を止めるだけであれば、
Application.EnableCancelKey = xlDisabled
これだけでも良いと思われますが、更に念には念を入れて、
Application.Interactive = False
こちらも入れています。
Interactiveについては、マクロ終了後も戻らないので、必ずTrueに戻してください。

上記VBAは、10回の「OK」で終了します。


ユーザーに絶対に停止させないVBAの実行結果

ユーザーに停止させないVBA

・・・

ユーザーに停止させないVBA

ユーザーに停止させないVBA




同じテーマ「マクロVBA技術解説」の記事

VBAの小数以下の演算誤差について
スピルでVBAの何が変わったか
CharactersプロパティとCharactersオブジェクト
ユーザーに絶対に停止させたくない場合のVBA設定
印刷範囲の設定・印刷範囲のクリア
VBAの省略可能な記述について
VBAのVariant型について
VBAのインデントについて
VBAの演算子まとめ(演算子の優先順位)
列幅不足による###表示や指数表示を判定する
VBA10大躓きポイント(初心者が躓きやすいポイント)


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ