プロが教える店舗&オフィスのセキュリティ対策術

ワークシート上にフォームで作成したチェックボックス、グループボックス、オプションボタンだけをまとめて削除するVBAです。
以下のように、種類ごとに分けて記述することは出来るのですが、3種類まとめて書く方法がわかりません。
CheckBoxes,GroupBoxes,OptionButtons と並べてもだめのようです。
ご教示ください。

Sub delete_test()
With ActiveSheet
For Each cb In .CheckBoxes
cb.Delete
Next
For Each gb In .GroupBoxes
gb.Delete
Next
For Each ob In .OptionButtons
ob.Delete
Next
End With
End Sub

A 回答 (6件)

Sub test01()


ActiveSheet.DrawingObjects.Delete
End Sub
で消えましたが。
For Eachを使わなければいけませんか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ActiveSheet.DrawingObjects.Delete
では、種類に関係なく全部消えてしうまうんじゃありませんか?

お礼日時:2005/08/12 23:17

merlionXXさん、こんにちは。


Wendy02です。

>オブジェクトに自分で名前を付けてしまったものは削除されないようです。

なるほどね、前回やっていた例の方法ですね。ただ、その方法は、Collection を取らない、コントロールに対して、後々処理するためのもので、必ずしも、フォームのコントロールでは、必要ありませんね。

実際、自分で名前のつけたものに対しては、一括して行うための処理ですから、任意の接頭辞をつけて、それで処理すればよいと思います。そのために名前の変更したのではないでしょうか?

それから、

ActiveSheet.DrawingObjects という設定の仕方は、こちらでは取れますが、これは、バージョンごとで調べていませんので、今は、なんとも言えません。ダメならShapes にすれば済むはずです。

この回答への補足

> 前回やっていた例の方法ですね。

ちがうんです。まったく別件!

補足日時:2005/08/12 23:14
    • good
    • 0

#3のWendy02 です。



私の回答、#1,#2 とも全部かぶっていますね。Goup Boxのチェックで、他のコントロールと前後関係があるのではないかと調べ、また、Like演算子のマルチ化ができないかと思いましたが、前者は、それが前後関係はなかったことと、後者は、可能なのですが正規表現ではないので確実性が乏しいということで断念した、その結果が#3です。

特別な付加的条件がなければ、基本的には、#2 さんので良いと思います。
    • good
    • 0

merlionXX さん、こんにちは。



3種類まとめてというのは、ひとつのFor Each In ~で行うということですか?
もともと、Collection で扱うようになっていますから、以下のようにすればよいと思います。

Sub delete_test2()
 With ActiveSheet
  .CheckBoxes.Delete
  .GroupBoxes.Delete
  .OptionButtons.Delete
 End With
End Sub

それとも、こんな風にしますか?(^^;

Sub delete_test3()
Dim obj As Object, nm As Variant
 With ActiveSheet
 For Each obj In .DrawingObjects
  For Each nm In Array("Check", "Option", "Group")
  If obj.Name Like nm & "*" Then
   obj.Delete
  End If
  Next nm
 Next obj
 End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。

名前を付けたチェックボックスのところで「Nameプロパティが取得できません」というエラーになってしまいました。

お礼日時:2005/08/12 14:10

シート上のチェックボックス、グループボックス、


オプションボタンはすべて削除して良いのですよね。
だったら、ループしなくてもこれでいけませんか?

With ActiveSheet
.CheckBoxes.Delete
.GroupBoxes.Delete
.OptionButtons.Delete
End With
    • good
    • 0
この回答へのお礼

ありがとうございました。

ループせずにいけるんですね。
知らなかった・・・・・。無知ですねえ。

お礼日時:2005/08/12 14:06

全てのオブジェクトを対象にif文で判断します。



Sub test()
With ActiveSheet
For Each cb In .Shapes
If InStr(cb.Name, "Group Box") Or _
InStr(cb.Name, "Option Button") Or _
InStr(cb.Name, "Check Box") Then cb.Delete
Next
End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。

やってみましたところ、オブジェクトに自分で名前を付けてしまったものは削除されないようです。

お礼日時:2005/08/12 14:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!