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で確認 ・データ型で小数以下の演算誤差に対応 ・小数以下の演算誤差にデータ型以外で対応する ・VBAの小数以下の演算誤差の最後に
スピルでVBAの何が変わったか
・Rangeオブジェクトに追加されたプロパティ ・セルに数式を設定する場合 ・1次元配列を返すユーザー定義関数 ・2次元配列を返すユーザー定義関数 ・JAG配列を返すユーザー定義関数 ・スピルのVBAでの活用について
CharactersプロパティとCharactersオブジェクト
・Charactersプロパティ ・Charactersオブジェクト ・CharactersプロパティとCharactersオブジェクトの使用例
ユーザーに絶対に停止させたくない場合のVBA設定
印刷範囲の設定・印刷範囲のクリア
・印刷範囲の設定 ・印刷範囲の取得 ・印刷範囲のクリア
VBAの省略可能な記述について
・変数の宣言 ・変数宣言のデータ型 ・Application.ScreenUpdating = True : Application.DisplayAlerts = True ・Applicationのプロパティ ・Applicationのメソッド ・Range.Value ・プロシージャーのCall ・メソッドのCall ・Let ・Next 変数 ・Step 1 ・引数が無い場合の() ・名前付き引数 ・メソッドの規定値 ・組み込み列挙 ・関数のモジュール名 ・コレクションのItem ・VBAの省略可能な記述の最後に
VBAのVariant型について
・Variant型変数のデータ型を調べる ・Variant型変数のメモリアドレス ・Variant型どうしの算術演算 ・Variant型どうしの比較演算 ・RangeのValueプロパティの比較 ・ユーザー定義型(Type)とバリアント(Variant)変数 ・Variant型の配列 ・配列をVariant型の仮引数に渡す ・RangeオブジェクトをVariant型の仮引数に渡す
VBAのインデントについて
・VBAのインデントの模範 ・VBAのブロックについて ・VBAのインデントの具体例 ・インデントの最後に
VBAの演算子まとめ(演算子の優先順位)
・演算子の優先順位 ・算術演算子 ・比較演算子 ・論理演算子 ・連結演算子 ・単項演算子
列幅不足による###表示や指数表示を判定する
・Range.Textブロバティ ・列幅不足を判定するVBA ・セル幅不足を判定するVBAの使用例
VBA10大躓きポイント(初心者が躓きやすいポイント)
・変数とは ・どこでインデントすれば良い ・カンマ「,」とピリオド「.」と半角スペース「 」 ・「:=」ってどこで使う ・「"」が多すぎて ・暗黙の型変換とは ・用語が難しい(オブジェクト、プロパティ、メソッド) ・配列とは ・ByValとByRef ・VBAを書く場所


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

正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.並べ替え(Sort)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


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