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

範囲指定した箇所のオートシェイプを削除したく、WEBで見つけた物に手を加えてみました。しかし、実行されるとシート内全てのオートシェイプが削除されてしまいます。
今削除したいのは、Range("B21:AA22")範囲内のものだけです。
正直なところ大半の意味も判らないまま触っているので、問題箇所の検討が付きません。
どの部分を修正するばいいのでしょうか?
また、何故ダメなのかも合せてご教示いただけたら幸いです。
宜しくお願い致します。

Dim myShp As Shape
Dim myR As Range, SR As Range
On Error Resume Next
Set myR = Range("B21:AA22")
If Err.Number <> 0 Then Exit Sub
On Error GoTo 0
For Each myShp In ActiveSheet.Shapes
Set SR = Range("B21:AA22")
If Not Intersect(SR, myR) Is Nothing Then
myShp.Delete
End If
Set SR = Nothing
Next
Set myR = Nothing

A 回答 (1件)

Intersectメソッドは、引数の共通部分を返してくれるものです。


上記のコードでは、すべてのシェイプの削除判定として、myRとSRを比較していますが、myRもSRはRange("B21:AA22")ですので、必ず削除条件を満たしてしまっているのが問題のようです。
そこで、SRには検出したシェイプのセルの範囲を指定するように修正します。
Set SR = Range("B21:AA22")
を下記のコードに修正し、実行してみてください。
Set SR = Range(myShp.TopLeftCell, myShp.BottomRightCell)
    • good
    • 0
この回答へのお礼

解決できました。
教えて頂いた内容で、今後はIntersectが意味がようやく判りました。今後は活用できそうです。
先の質問と同様、丁寧に教えていただきありがとうございました。

お礼日時:2008/12/09 08:36

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