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

解決済みの質問

コマンドボタンを削除しないか自動生成する

エクセルのマクロで、不要な表やオブジェクトを一括で削除するためのマクロを作成し、コマンドボタンをシートに作成してマクロを登録しています。

コマンドを実行すると、不要な表やオブジェクトと一緒に、マクロを実行するためのコマンドボタンも削除されてしまいます。

そのため、コマンドボタンを削除されないためにはどうしたらいいでしょうか。

あるいは、コマンドボタンを自動で生成し、マクロを登録するにはどうしたらいいでしょうか。

参考までに、オブジェクトを削除するマクロは次の通りです。

Sub 削除()

Cells.Delete

Dim shp As Shape

For Each shp In ActiveSheet.Shapes
shp.Delete
Next shp

End Sub

よろしくお願い致します。

投稿日時 - 2018-05-16 06:39:29

QNo.9498920

困ってます

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

フォームのボタンのことですね。

まず、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

投稿日時 - 2018-05-16 10:54:34

お礼

ありがとうございます。

Application.Caller というのがあるのがわかりました。
あまり、オブジェクトをマクロでしたことがないので、大変勉強になりました。

投稿日時 - 2018-05-16 22:37:51

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

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

回答(2)

ANo.2

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
などを参考に。

投稿日時 - 2018-05-16 11:37:15

お礼

あまり、ボタンなどを使用したことがなかったので、大変勉強になりました。
もう少し時間をかけて、参照サイトを読んでみます。

投稿日時 - 2018-05-16 22:42:31