- ベストアンサー
コマンドボタンを削除しないか自動生成する
- エクセルのマクロで、不要な表やオブジェクトを一括で削除するためのマクロを作成し、コマンドボタンをシートに作成してマクロを登録しています。
- コマンドを実行すると、不要な表やオブジェクトと一緒に、マクロを実行するためのコマンドボタンも削除されてしまいます。コマンドボタンを削除されないためにはどうしたらいいでしょうか。
- あるいは、コマンドボタンを自動で生成し、マクロを登録するにはどうしたらいいでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
フォームのボタンのことですね。 まず、Cells.Delete の時点で、フォームコントロールを含むすべての図形が削除されてしまいますね。 ですので、セルの内容だけを初期化してから、以下のマクロを登録したフォームボタン以外の図形を削除するようにします。 Sub 削除() Dim shp As Shape Cells.Clear For Each shp In ActiveSheet.Shapes If shp.Name <> ActiveSheet.Shapes(Application.Caller).Name _ Then shp.Delete Next shp End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
ShpのTypeで判別しては。 ーー Sub 削除() Dim shp As Shape '--シートの図形 For Each shp In ActiveSheet.Shapes MsgBox shp.Name MsgBox shp.Type If shp.Type = 12 Then shp.Delete End If Next shp '--セルの値 'Cells.Delete End Sub '--- If shp.Type = 12 THENの部分のコードは,tano他のバリエーションは https://qiita.com/AfricaUmare/items/3c4382fd7cc63b76cce9 に載っています。 ーー 当初、開発ー挿入で、ボタンを設定したのなら ・8は、msoFormControlのボタンです ・12はmsoOLEControlObjectのボタンです。 ・その他なのか。 質問には、本当は明記すべき大切な事項です。 ーー >コマンドボタンを自動で生成し、・・ そこまで行かなくても良いのではと思うが。 記事はWEB照会すればすぐ見つかる。 検索語は 「VBA 動的にコマンドボタンを作る」と「動的」を入れることです。 https://www.excel-excel.com/tipsctr/vbac_8.html などを参考に。
お礼
あまり、ボタンなどを使用したことがなかったので、大変勉強になりました。 もう少し時間をかけて、参照サイトを読んでみます。
お礼
ありがとうございます。 Application.Caller というのがあるのがわかりました。 あまり、オブジェクトをマクロでしたことがないので、大変勉強になりました。