※ ChatGPTを利用し、要約された質問です(原文:Excel VBAでのシートの削除について)
このQ&Aのポイント
Excel VBAでシート上のボタンをクリックしてシートを削除する方法について。Application.DisplayAlertsを設定して削除する際にオートメーションエラーが発生し、解決方法を探している。
シートの削除後に別のシートで処理を行う場合には、再度メッセージを表示したい。Sheet1の削除後、アクティブになるSheet2でDisplayAlertsを設定する方法を試したが、結果は思ったようにならなかった。なぜこのような結果になるのか疑問。
Excel VBAでシートの削除後、アクティブになったシートでDisplayAlertsを設定する方法について。ボタンをクリックすると設定が反映され、メッセージが表示されるが、なぜ最初の設定が反映されないのか不明。
Excel VBAで、シート上に配置されたボタンをクリックすることで、メッセージを出さずにそのシートの削除をしたいと思っています。
サンプルとして、シート上(例えばSheet1)にボタンを1個配置し、
-------------------------------------------------------
Private Sub CommandButton1_Click()
Application.DisplayAlerts = False
Delete
Application.DisplayAlerts = True
End Sub
-------------------------------------------------------
のようにすると、オートメーションエラーが起きます。
そこで、
Application.DisplayAlerts = True
をコメントアウトしてやれば実行はできるのですが、その後別のシートで処理を行う場合には、再度メッセージを表示してほしいと思っています。
ためしに、Sheet1削除後にアクティブになるSheet2に次のようなコードを記述しました。Sheet1同様、シート上にボタンを1個配置しています。
-------------------------------------------------------
Private Sub CommandButton1_Click()
MsgBox Application.DisplayAlerts
End Sub
Private Sub Worksheet_Activate()
MsgBox "次に出るメッセージはアクティブ直後のDisplayAlerts設定。"
MsgBox Application.DisplayAlerts
Application.DisplayAlerts = True
MsgBox "次に出るメッセージは変更後のDisplayAlerts設定。"
MsgBox Application.DisplayAlerts
End Sub
-------------------------------------------------------
こうすれば、Sheet1削除後、アクティブになった直後はDisplayAlertsがFalse。その後設定変更してTrueになるかとおもったのですが、結果はFalseでした。しかしその後、ボタンをクリックするとTrueが返ってきました。
いろいろ調べましたが、なぜこのような結果になるのかわかりません。よろしくお願いいたします。
お礼
ありがとうございました。 とりあえず回避策を見つけたのですが、このご回答を参考にしたいと思います。 また、DisplayAlertsはOFFICEのバージョンによって仕様が違うのかもしれませんね。 参考までに、OFFICE2000での記載を下記に貼り付けておきます。 こちらの勘違いで、同じ意味でしたら申し訳ございません。 ------------------------------------------------------------ このプロパティは、False に設定してマクロの実行を終了しても、自動的に True には戻りません。マクロの実行が終了したときは、常にプロパティを True に設定するようにします。