今回はTwitterで見かけたWorkbook_BeforeSaveの中でApplication.DisplayAlerts = Falseを実行しても、保存時の確認ダイアログが消えないというVBAの質問にお答えします。
質問内容
次のようなコードを実行しても、保存時にダイアログが表示されてしまうとのことです。

どのダイアログの事か分からなかったのですが、例えば「互換性チェック」などに相当すると思います。

解決策
状況によるので、有効な対策を一つに絞れません。
VBAからWorkbook.Saveしている場合
それならWorkbook_BeforeSaveの中ではなく、SaveメソッドをApplication.DisplayAlert = False / Trueではさみましょう。
Sub ブックの保存() Application.DisplayAlerts = False ThisWorkbook.Save Application.DisplayAlerts = True End Sub
互換性チェックだけを回避したい場合
VBAを使わなくとも、互換性確認をOFFにしてしまえば二度と聞かれることはないです。

それでも、初めてバッチ処理するブックでVBAからOFFにしたいこともあるでしょう。
専用のプロパティCheckCompatibilityがあります。これを該当のブックに対して行って下さい。
Sub 互換性チェックを無効化する() ActiveWorkbook.CheckCompatibility = False End Sub
ユーザーからの保存でダイアログ表示を回避したい
前述の方法で対処できない場合に、強引に行いたいということであればこのような方法があります。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Application.DisplayAlerts Then Cancel = True Application.EnableEvents = False Application.DisplayAlerts = False ThisWorkbook.Save Application.DisplayAlerts = True Application.EnableEvents = True End If End Sub
Workbook_BeforeSaveを呼ばれた時はCancel = Trueで保存を握りつぶして、Application.DisplayAlertsを止めてからSaveメソッドを再コールしてやれば良いです。
Application.EnableEvents = False / True は書かなくても良いのですが、個人的に関数を再帰的に呼ぶのが怖いので安全のため自身のSaveメソッドによってイベントが起こらないように止めています。
保存させたくない(おまけ)
たまに保存させたくない。終了時に保存メッセージを出したくないという話を聞きます。
Cancel = Trueを使いつつ、ThisWorkbook.Saved = Trueにすると幸せになれると思います。
まとめ
保存時のダイアログメッセージはいくつかあると思いますが、Application.DisplayAlertsは全てを握りつぶしてしまいます。
全てを握りつぶしてしまうとバグの発見が遅れたりするので、出来るだけピンポイントに潰すようにしましょう。
で、どんな時にダイアログメッセージが出るんだっけ・・・?
以上
何か御座いましたらコメント欄、またはTwitterからどうぞ♪
それではまた来週♪ ちゅんちゅん(・8・)