プロが教えるわが家の防犯対策術!

Excel VBA で、オートシェイプを扱おうとしています。

たとえば、

ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 50, 50).Name = "TestShape1"

のようにして、それぞれ名前を付けているのですが、プログラム中、特定のオートシェイプを削除したり、再び同じ名前で作ったり、ということを行っています。

前者の場合、すでに当該オートシェイプが削除されている場合、目的のオートシェイプが存在していないためか、エラーが発生します。また後者の場合も、オートシェイプを重ねて作成することになってしまうケースにエラーが発生します。

On Error Resume Next で回避することも考えられるでしょうが、もっと直接的に、ある名前のオートシェイプが存在する/しない、をチェックしたうえで各処理を行うようにしたいのです。

どのような方法があるでしょうか?

A 回答 (2件)

Dim objShp As Shape



For Each objShp In ActiveSheet.Shapes
If objShp.Name = "TestShape1" Then
処理Y '該当オートシェイプありの場合の処理
Else
処理N '該当オートシェイプなしの場合の処理
End If
Next
    • good
    • 3
この回答へのお礼

結局、いちいち名前を確認してやるしかないのですかね。
オートシェイプの数も少ないので、これでやることにします。

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

お礼日時:2005/10/15 14:57

先の回答は間違いでした。


(Dim 行はそのまま)

該当オートシェイプありで処理したい場合
For Each objShp In ActiveSheet.Shapes
If objShp.Name = "TestShape1" Then
処理 '該当オートシェイプありの場合の処理
End If
Next
----

該当オートシェイプなしで処理したい場合はたとえば(必要に応じて工夫してください)
For Each objShp In ActiveSheet.Shapes
If objShp.Name = "TestShape1" Then
MsgBox "該当オートシェイプあり"
Exit Sub 'あればマクロを終了
End If
Next
処理 '該当オートシェイプなしの場合の処理
----
    • good
    • 1
この回答へのお礼

重ねてありがとうございます。助かりました。

お礼日時:2005/10/15 15:28

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A