例えばマクロでシートを削除する時など、Excel既定の警告メッセージを出さないようにする為に Application.DisplayAlertsプロパティを制御する事はよくあります。
通常は
Application.DisplayAlerts = False
Sheets("sheet1").Delete
Application.DisplayAlerts = True
...こんな感じで.DisplayAlerts = False にして、用がなくなったら既定の True に戻したほうが良いです。
最近
Sub auto_open()
Application.DisplayAlerts = False
End Sub
Sub auto_close()
Application.DisplayAlerts = True
End Sub
こんなコードを見ましたが、意図としてはBookを開いて閉じるまで.DisplayAlerts = Falseを保持したいという事なのでしょう。
確かに2000のヘルプには
『このプロパティは、False に設定してマクロの実行を終了しても、自動的に True には戻りません。マクロの実行が終了したときは、常にプロパティを True に設定するようにします』
とありますからね。
でも実際にはマクロ終了後、True に戻ります。意図した結果にはなりません。
現在のヘルプはどうでしょう。『DisplayAlerts プロパティ』
変更されているようです。
ただし、ちょっとヘンな例外があって、CommandBarControlから呼び出すと、マクロ終了後も True に戻りません。
実験コード。
Sub prep()を実行すると、Sheetを追加してButtonを5個配置します。いろいろと試してみるのもよいかも。

[CommandBar作成と実行]ボタンを実行した後、[Msg DisplayAlerts]ボタンでDisplayAlertsプロパティの状態を確認できます。
CommandBars("temporary")の[DisplayAlertsの切替]で設定すると、False状態を保持します。
[DisplayAlerts = True]ボタンなどの通常のマクロでは変更できません。
[DisplayAlertsの切替]CommandBarControlはTrue/Falseを可逆的に切り替えるようになっているので、これで解除できます。
その他、解除要件としては
・VBEウィンドウで直接マクロを実行する。
(どんな内容でもOK。MsgBoxを表示させるだけの簡単なものでも)
・他BookのWindowに切り替える。
など。...簡単に解除されちゃいます。
いずれにしても冒頭に書いたように、必要な箇所だけ制御して、用が済んだら元に戻すようにしたほうが良いという事のようです。
#確認はExcel2000以降のバージョンのみ。
通常は
Application.DisplayAlerts = False
Sheets("sheet1").Delete
Application.DisplayAlerts = True
...こんな感じで.DisplayAlerts = False にして、用がなくなったら既定の True に戻したほうが良いです。
最近
Sub auto_open()
Application.DisplayAlerts = False
End Sub
Sub auto_close()
Application.DisplayAlerts = True
End Sub
こんなコードを見ましたが、意図としてはBookを開いて閉じるまで.DisplayAlerts = Falseを保持したいという事なのでしょう。
確かに2000のヘルプには
『このプロパティは、False に設定してマクロの実行を終了しても、自動的に True には戻りません。マクロの実行が終了したときは、常にプロパティを True に設定するようにします』
とありますからね。
でも実際にはマクロ終了後、True に戻ります。意図した結果にはなりません。
現在のヘルプはどうでしょう。『DisplayAlerts プロパティ』
変更されているようです。
ただし、ちょっとヘンな例外があって、CommandBarControlから呼び出すと、マクロ終了後も True に戻りません。
実験コード。
'標準Module Option Explicit '--------------------------------------------------------------------- Sub prep() With Sheets.Add With .Buttons.Add(10, 10, 100, 30) .Caption = "CommandBar作成と実行" .OnAction = "barConTest" End With With .Buttons.Add(10, 50, 100, 30) .Caption = "DisplayAlertsの切替" .OnAction = "dspAlertTest" End With With .Buttons.Add(10, 90, 100, 30) .Caption = "DisplayAlerts = True" .OnAction = "TestReset" End With With .Buttons.Add(10, 130, 100, 30) .Caption = "Msg DisplayAlerts" .OnAction = "AlertChk" End With With .Buttons.Add(150, 10, 100, 30) .Caption = "CommandBar撤去" .OnAction = "Auto_Close" End With End With End Sub '--------------------------------------------------------------------- Sub barConTest() 'CommandBar作成と実行 With Application On Error Resume Next .CommandBars("temporary").Delete On Error GoTo 0 With .CommandBars.Add(Name:="temporary", temporary:=True) With .Controls.Add(Type:=msoControlButton) .OnAction = "dspAlertTest" .Caption = "DisplayAlertsの切替" .Style = msoButtonCaption .accDoDefaultAction End With .Visible = True End With End With End Sub '--------------------------------------------------------------------- Sub dspAlertTest() 'DisplayAlertsの切替 With Application .DisplayAlerts = Not .DisplayAlerts .OnTime Now, "AlertChk" End With End Sub '--------------------------------------------------------------------- Sub TestReset() 'DisplayAlerts = True With Application .DisplayAlerts = True AlertChk .OnTime Now, "AlertChk" End With End Sub '--------------------------------------------------------------------- Sub AlertChk() 'Msg DisplayAlerts Dim flg As Boolean flg = Application.DisplayAlerts MsgBox CStr(flg), , "DisplayAlerts" 'Debug.Print "DisplayAlerts = " & CStr(flg) End Sub '--------------------------------------------------------------------- Sub Auto_Close() 'CommandBar撤去 On Error Resume Next Application.CommandBars("temporary").Delete On Error GoTo 0 End Sub
Sub prep()を実行すると、Sheetを追加してButtonを5個配置します。いろいろと試してみるのもよいかも。

[CommandBar作成と実行]ボタンを実行した後、[Msg DisplayAlerts]ボタンでDisplayAlertsプロパティの状態を確認できます。
CommandBars("temporary")の[DisplayAlertsの切替]で設定すると、False状態を保持します。
[DisplayAlerts = True]ボタンなどの通常のマクロでは変更できません。
[DisplayAlertsの切替]CommandBarControlはTrue/Falseを可逆的に切り替えるようになっているので、これで解除できます。
その他、解除要件としては
・VBEウィンドウで直接マクロを実行する。
(どんな内容でもOK。MsgBoxを表示させるだけの簡単なものでも)
・他BookのWindowに切り替える。
など。...簡単に解除されちゃいます。
いずれにしても冒頭に書いたように、必要な箇所だけ制御して、用が済んだら元に戻すようにしたほうが良いという事のようです。
#確認はExcel2000以降のバージョンのみ。