マクロの実行が中断しないよう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