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

いつもお世話になります

今、入力データチェックのため与えられたデータで構造図をシート上に描いています
構造図のデータは□、▽、△の形とそれぞれ高さ、幅、位置を与えていて
形のデータは入力規則からドロップダウンリストで□、▽、△を選ぶようになっています

構造図を描くときは、前に処理したデータの図を消して新たな図を描いていきますが
そこで問題が起きました
6行有った前のデータを消して5行のデータの構造図を描くために残っていた図を消しに
行ったとき、なぜかActivesheet.Shapes.Countのカウントがひとつ増えていて、下記の
ステーメントの最後のループでエラーになってしまいます

Top1 = Cells(40, 1).Top
Top2 = Cells(61, 1).Top
For Each PicObj In ActiveSheet.Shapes
TheTop = PicObj.Top
If TheTop >= Top1 And TheTop <= Top2 Then
PicObj.Delete
End If
Next PicObj

明らかに、ドロップダウンリスト"□"の図を消した時に起きてるのですが、対処法が分かりません
尚、図を消す前にブレークし実行をやり直すとCountがもとに戻り正常になります
一時的にShapeのカウントに入るみたいです

以上、対処法が分かりましたら教えてください
お願いいたします

尚、サンプルの6番目のデータ、デバッグのために適当に入れています

「vba ドロップダウンリストの図を削除す」の質問画像

A 回答 (1件)

入力規則のドロップダウンもShapeなんですよね



Sub test()
  Dim s As Shape
  With ActiveSheet
    For Each s In .Shapes
      Debug.Print s.Name, s.AutoShapeType
    Next
    Debug.Print .Shapes.Count, .DrawingObjects.Count, .Rectangles.Count
  End With
End Sub

このようなテストコードで確認できます
現状のままShapesをループするなら、まずAutoShapeTypeで判定して処理する事で回避できます

もし上記の DrawingObjects や Rectangles のCount で正常にカウントできる状況なら
Dim d As Object
For Each d In ActiveSheet.DrawingObjects

ともできますが、DrawingObjectsなどは隠しオブジェクトなので推奨されないかもですね
    • good
    • 0
この回答へのお礼

いつもお世話になります
返信、ありがとうございます

参考になります
図の処理に関していろいろ有りますね
また、いろいろ勉強させてください
AutoShapeTypeも検討しみましたが
今回はOn Error Gotoで逃げました

ありがとうございました

お礼日時:2018/10/26 10:23

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