2012-10-08 26 views
10

ワークシートのユーザー入力パラメータに基づいて、ボタンに関連付けられたマクロが動的な図形を描画するExcelワークシートがあります。フォームコントロール以外のすべての図形を削除する

シートをクリーニングするための新しいマクロを作成しようとしています。つまり、ワークシート内のすべての図形を削除しようとしています。

私は以下のコードを使用してみましたが、実際にはすべての図形が削除されていましたが、ボタンフォームコントロールも削除されました。ワークシートの形状(矢印、テキストボックス、楕円など)を取り除くだけの簡単な方法はありますか?本当にありがとう!!!

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    If Shp.Type = msoAutoShape Or Shp.Type = msoTextBox Then Shp.Delete 
Next Shp 

End Sub 

代わりにあなたの周りの他の方法で作業して削除しないようなタイプを指定することができますのみ使用することができオートシェイプやテキストボックスを削除するには

Sub DeleteAllShapes() 

Dim Shp As Shape 

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

End Sub 

答えて

15

。列挙型を使用できますが、型名を使用すると読みやすくなります。次のスニペットは、フォームコントロールとOLEコントロールオブジェクト以外のすべてを削除します。

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    If Not (Shp.Type = msoOLEControlObject Or Shp.Type = msoFormControl) Then Shp.Delete 
Next Shp 

End Sub 

MSOシェイプタイプの完全なリスト。 http://msdn.microsoft.com/en-us/library/office/aa432678(v=office.12).aspx

Ron de Bruinには、この質問に出会った他の人に関係するスニペットのコレクションがあります。 http://www.rondebruin.nl/controlsobjectsworksheet.htm

+0

残念ながら、私はあなたの最初のコードを実行すると、フォームのコントロールが削除されます。 2. 2番目の方がうまくいきます:フォームを削除し、フォームコントロールだけを残します。ただし、今回の「テキストボックス」は削除されません。私はほとんどのトリックを行う1つのライナーコードがあったと確信していますが、私はそれを覚えていないことができます。 – marillion

+0

どのようなタイプのフォームコントロールがありますか?私はActiveXコントロールのチェックボックスとフォームコントロールボタンでそれをテストしたところ(2番目のもの)、正常に動作します。 –

+0

申し訳ありませんが、私はあなたの秒を見た後、私のコメントを編集したばかりです。あなたが言ったように、2番目のコードはフォームコントロールには触れません。これは完璧です。ただし、テキストボックスは何らかの理由で削除されません。 – marillion

関連する問題