Excelの確認メッセージ
Excelでは取消(Ctrl + Z)での戻しが出来ないような操作や、データが完全に消えてしまうような操作などを行うと、本当に実施してよいか確認するメッセージを表示します。
例えば、ワークシートの削除を行う場合には「このシートは完全に削除されます。続けますか?」と表示されます。
この確認メッセージがVBA実行時に表示されると、そこで処理が一時的に止まり、確認メッセージのボタン操作待ちになります。自動実行しているのに、人の操作待ちになってしまうのは非常に邪魔です。
これを回避するには、Application.DisplayAlertsプロパティを利用します。
構文
Property Application.DisplayAlerts As Boolean
設定、または、参照が可能です。通常は設定のみ使います。
True=警告メッセージや確認メッセージの表示を行います。
False=警告メッセージや確認メッセージを表示しません。
サンプルコード
以下のサンプルは、シートが複数ある場合に、一番左のシートの削除を行います。
確認メッセージが出る場合と、出ない場合をそれぞれのコードを紹介します。
1. 確認メッセージが表示されてしまうサンプルコード
以下のコードを実行すると、シートが複数あれば一番左のシートを削除しようとしますが、削除前に確認メッセージが表示されます。そこで「削除」ボタンを押せば処理がVBAに戻ります。
1 2 3 4 5 6 7 |
Sub DisplayAlertsTest() '// シート数が1より多い場合 If Worksheets.Count > 1 Then '// 一番左のシートを削除 Call Sheets(1).Delete '// ここで確認メッセージが表示され、処理が止まる End If End Sub |
1. 確認メッセージが表示されてないようにするサンプルコード
以下のコードを実行すると、シートが複数あれば一番左のシートを削除します。Application.DisplayAlertsプロパティにFalse(確認メッセージを非表示)に設定しているため、削除前の確認メッセージは表示されず、シートの削除が実行されます。
1 2 3 4 5 6 7 8 9 10 11 |
Sub DisplayAlertsTest() Application.DisplayAlerts = False '// シート数が1より多い場合 If Worksheets.Count > 1 Then '// 一番左のシートを削除 Call Sheets(1).Delete '// Application.DisplayAlerts = Falseにより確認メッセージが表示されない End If Application.DisplayAlerts = True End Sub |
終わったらTrueに戻す
Applicationオブジェクトは現在利用中のExcelアプリケーションを指します。そのため、Application.DisplayAlertsに設定した内容は、VBAだけでなく利用中のExcel自体にも影響があります。
ただ、Application.DisplayAlerts = Falseで確認メッセージを非表示にした状態でTrueに戻さなかった場合でも、VBAの関数が終わればTrue(確認メッセージを表示)する状態に戻ります。
そのため、Trueに設定するコードを書き忘れていてもExcel上でシートの削除を行えば、削除確認ダイアログは表示されます。
Excel操作に影響が出るため、このような仕様になっていると思います。
それでも、コードとしてはExcelの暗黙動作に頼るのではなく、Application.DisplayAlerts = Trueを設定するのが作法です。