ハマっている「お菓子」を教えて!

 指定範囲(I9:CW40)から図形(円・四角形)のクリアをするとエラーになってしまいます。終了をすればクリアはできるのですが。御教授願えませんでしようか?(尚四角形はセルの枠線上に貼り付けるようにしてあります。)

Sub 図形のクリア()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Dim myRng As Range
Dim sp As Variant
Set myRng = Range("I9:CW40")
For Each sp In ActiveSheet.Shapes
If Not Intersect(Range(sp.TopLeftCell, sp.BottomRightCell), myRng) Is Nothing Then
sp.Delete (ここで実行時1004のエラーになる。)
End If
Next
Set myRng = Nothing

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub

A 回答 (2件)

当然の結果だと思います


ForEachは Inに指定した コレクションが普遍であるとして動作します

削除を行いたいのであれば ShapesのCountプロパティを使ってループを組みます

dim n as integer, sp as Variant
for n = ActiveSheet.Shapes.Count to 1 step -1
  set sp = ActiveSheet.Shapes(n)
  if Not Intersect(Range(sp.TopLeftCell, sp.BottomRightCell),myRng) Is Nothing then
    sp.Delete
  end if
next

といった具合に Shapesコレクションの末尾から削除するようにしましょう
    • good
    • 1
この回答へのお礼

  おしゃるとおりだと思います。無事に解決できました。
やはり勉強不足は否めませんし冷静に考えればそうなんですけどご指摘のように自分で考えて修正できるように少しずつでもスキルアップしていきたいと思います。

本当にありがとうございます。

お礼日時:2013/01/27 21:46

当方xl2010ですが、特にエラーも無く実行できました。


一般にFor Eachを用いて削除すると、内部の管理番号?の振り直しのためか、消し損じが出ることがありますが、今回若干の試験では、消し損じも確認できませんでした。
エラー発生時のShapeを確認し、何か特異点が無いか確認してはいかがでしょうか。
    • good
    • 0

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

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


おすすめ情報