Excelの確認メッセージ

Excelでは取消(Ctrl + Z)での戻しが出来ないような操作や、データが完全に消えてしまうような操作などを行うと、本当に実施してよいか確認するメッセージを表示します。

例えば、ワークシートの削除を行う場合には「このシートは完全に削除されます。続けますか?」と表示されます。

この確認メッセージがVBA実行時に表示されると、そこで処理が一時的に止まり、確認メッセージのボタン操作待ちになります。自動実行しているのに、人の操作待ちになってしまうのは非常に邪魔です。

これを回避するには、Application.DisplayAlertsプロパティを利用します。


構文

Property Application.DisplayAlerts As Boolean

設定、または、参照が可能です。通常は設定のみ使います。

True=警告メッセージや確認メッセージの表示を行います。

False=警告メッセージや確認メッセージを表示しません。


サンプルコード

以下のサンプルは、シートが複数ある場合に、一番左のシートの削除を行います。

確認メッセージが出る場合と、出ない場合をそれぞれのコードを紹介します。

1. 確認メッセージが表示されてしまうサンプルコード

以下のコードを実行すると、シートが複数あれば一番左のシートを削除しようとしますが、削除前に確認メッセージが表示されます。そこで「削除」ボタンを押せば処理がVBAに戻ります。

1. 確認メッセージが表示されてないようにするサンプルコード

以下のコードを実行すると、シートが複数あれば一番左のシートを削除します。Application.DisplayAlertsプロパティにFalse(確認メッセージを非表示)に設定しているため、削除前の確認メッセージは表示されず、シートの削除が実行されます。



終わったらTrueに戻す

Applicationオブジェクトは現在利用中のExcelアプリケーションを指します。そのため、Application.DisplayAlertsに設定した内容は、VBAだけでなく利用中のExcel自体にも影響があります。

ただ、Application.DisplayAlerts = Falseで確認メッセージを非表示にした状態でTrueに戻さなかった場合でも、VBAの関数が終わればTrue(確認メッセージを表示)する状態に戻ります

そのため、Trueに設定するコードを書き忘れていてもExcel上でシートの削除を行えば、削除確認ダイアログは表示されます。

Excel操作に影響が出るため、このような仕様になっていると思います。

それでも、コードとしてはExcelの暗黙動作に頼るのではなく、Application.DisplayAlerts = Trueを設定するのが作法です。