こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBAでのシートの削除について

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が返ってきました。
いろいろ調べましたが、なぜこのような結果になるのかわかりません。よろしくお願いいたします。

投稿日時 - 2007-02-25 13:45:12

QNo.2782689

すぐに回答ほしいです

質問者が選んだベストアンサー

ボタンをクリックしてプログラムを書いたシートを削除しているのでしょうか?
それでしたら、コードが書かれたシート自体が無くなっているので、マクロに矛盾が起きてしまうせいでしょう。
シートモジュール上ではどのようにやっても上記の制限(シート消滅後のコマンド実行の矛盾)からは逃れる事は出来ません。

標準モジュールに
Sub WS_DEL()
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub
と記入して、ボタンにマクロを割り付ければ上記のような問題は起きません。

>なぜこのような結果になるのかわかりません。よろしくお願いいたします。

VBAのヘルプに下記の記載があります。
モジュールの実行(終了)後は自動的にTrueに戻るようです。
-------------------------------------------------------------
このプロパティを False に指定した場合、クロス プロセス コードの実行中以外は、コードの終了時に自動的に True に変更されます。

投稿日時 - 2007-02-25 14:07:44

お礼

ありがとうございました。
とりあえず回避策を見つけたのですが、このご回答を参考にしたいと思います。
また、DisplayAlertsはOFFICEのバージョンによって仕様が違うのかもしれませんね。
参考までに、OFFICE2000での記載を下記に貼り付けておきます。
こちらの勘違いで、同じ意味でしたら申し訳ございません。
------------------------------------------------------------
このプロパティは、False に設定してマクロの実行を終了しても、自動的に True には戻りません。マクロの実行が終了したときは、常にプロパティを True に設定するようにします。

投稿日時 - 2007-02-26 16:49:34

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問