
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が返ってきました。
いろいろ調べましたが、なぜこのような結果になるのかわかりません。よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
ボタンをクリックしてプログラムを書いたシートを削除しているのでしょうか?
それでしたら、コードが書かれたシート自体が無くなっているので、マクロに矛盾が起きてしまうせいでしょう。
シートモジュール上ではどのようにやっても上記の制限(シート消滅後のコマンド実行の矛盾)からは逃れる事は出来ません。
標準モジュールに
Sub WS_DEL()
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub
と記入して、ボタンにマクロを割り付ければ上記のような問題は起きません。
>なぜこのような結果になるのかわかりません。よろしくお願いいたします。
VBAのヘルプに下記の記載があります。
モジュールの実行(終了)後は自動的にTrueに戻るようです。
-------------------------------------------------------------
このプロパティを False に指定した場合、クロス プロセス コードの実行中以外は、コードの終了時に自動的に True に変更されます。
ありがとうございました。
とりあえず回避策を見つけたのですが、このご回答を参考にしたいと思います。
また、DisplayAlertsはOFFICEのバージョンによって仕様が違うのかもしれませんね。
参考までに、OFFICE2000での記載を下記に貼り付けておきます。
こちらの勘違いで、同じ意味でしたら申し訳ございません。
------------------------------------------------------------
このプロパティは、False に設定してマクロの実行を終了しても、自動的に True には戻りません。マクロの実行が終了したときは、常にプロパティを True に設定するようにします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
プログラミングを学べる!?進化している子どものおもちゃについて専門家に聞いた!
プログラミングを学べるレゴブロックがあることはご存知だろうか。レゴに限らず最近のおもちゃには、プログラミングの要素がどんどん取り入れられているようだ。「教えて!goo」にも、「プログラミングを学べる子供...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
実行時エラー1004「Select メソ...
-
【ExcelVBA】全シートのセルの...
-
excelのマクロで該当処理できな...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
EXCEL VBAで複数シートから該当...
-
ExcelのVBAを使い、複数シート...
-
【VBA】色のついたシート名を取得
-
VBAで指定シート以外の選択
-
同じ作業を複数のシートに実行...
-
【エクセルVBA】「Protect User...
-
Excel VBA での計算について…
-
ユーザーフォームに入力したデ...
-
VBA ユーザーフォーム上のチェ...
-
【エクセル】オプションボタン...
-
VBA 入力月で該当シートを選択...
-
【Excel VBA】Worksheets().Act...
-
【VBA】全ての複数シートから指...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
VBA 存在しないシートを選...
-
エクセルで通し番号を入れてチ...
-
VBA 検索して一致したセル...
-
XL:BeforeDoubleClickが動かない
-
VBA 指定した回数分、別シート...
-
VBAマクロでシートコピーした新...
-
シートが保護されている状態で...
-
ブック名、シート名を他のモジ...
-
【VBA】全ての複数シートから指...
-
別のシートから値を取得するとき
-
ExcelのVBAのマクロで他のシー...
-
Excel チェックボックスにチェ...
おすすめ情報