和風スパゲティのレシピ

日本語でコーディングするExcelVBA

確認メッセージを非表示にする - DisplayAlerts

マクロの実行が中断しないようExcelからの確認メッセージを非表示にする、
DisplayAlertsプロパティの使い方を解説します。

基本形

Application.DisplayAlerts = False
' ここから

確認メッセージをスキップしたいコード

' ここまでの間、Excelが表示する確認メッセージが非表示になる。
Application.DisplayAlerts = True

コードの解説

Application.DisplayAlertsプロパティにはTrue/Falseを指定(代入)でき、
Falseの間はExcelからの確認メッセージをスキップできます。


例えば「シートを削除」しようとした際、Excelから、

シート削除の確認メッセージ

この確認メッセージが表示されるのですが、
これはマクロによるDeleteメソッドの実行時にも表示されてしまいます。


これではせっかくのマクロが止まってしまいますが、ここで

Application.DisplayAlerts = False
削除したいシート.Delete
Application.DisplayAlerts = True

とすることで、マクロを中断せずにシートを削除することができます。


主に削除などで表示される「本当によろしいですか?」をスキップする際に使用し、
例えばブックを保存せずに閉じる場合にも、

Application.DisplayAlerts = False
閉じたいブック.Close
Application.DisplayAlerts = True

このようにDisplayAlertsプロパティを利用できます。


なお、確認メッセージの「はい/いいえのどちらが選ばれるか」は、
デフォルトの選択肢が選ばれるわけではない点に注意してください。


例えば「ブックを名前を付けて保存」する場合に、
同名のブックが既に存在していると、

同名ファイルの上書き確認メッセージ

この確認メッセージが表示されます。


このメッセージは見ての通り「いいえ」がデフォルトですが、
Application.DisplayAlerts = False の元これを実行すると、
確認メッセージ無く上書き保存されることになります。


どちらで実行されるのかは、都度試して確認してください。


このApplication.DisplayAlerts = Falseを利用した「同名ファイルの上書き」も、
頻出の使い方ですので覚えておきましょう。

使用した場合は即座にTrueに戻すこと

Application.DisplayAlerts = False
削除したいシート.Delete
Application.DisplayAlerts = True

このコードにおけるApplication.DisplayAlertsのオンオフコードは、
実行したいコードの実に3倍の長さになってしまっています。


これが面倒ということもあり、たまに

Application.DisplayAlerts = False

マクロ冒頭に書いて常時Falseにしているコードも見かけますが、
これはかなり危険なためやめた方が良いです。


というのも、この「確認メッセージを非表示」という設定は、
思いもよらない想定外のメッセージをスキップすることもあります。


先ほどの「上書き保存」が意図せぬファイルに実行されてしまったり、
何らかのマクロの動きを検知して、

このマクロに○○の問題が発見されました。
続行してよろしいですか?

なんてメッセージが出ることもあります。

これをDisplayAlerts=Falseによってスキップしてしまうと、
マクロが静かに止まる上、どこで止まったかもわからない
という、調査も困難な状況に陥る可能性もあります。


Application.DisplayAlerts = False

Application.DisplayAlerts = True

は、必ずセットにして運用してください。


詳しくはこちらの記事をどうぞ。
www.limecode.jp