[[20101109113323]] 『shapesオブジェクト』(まー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『shapesオブジェクト』(まー)
あるシートにフォームボタンにマクロ登録し写真を貼り付けるようにしています。
このような写真シートがいくつかあり、マクロで写真のみをすべて消去したいのです。

dim ws as worksheet
for each ws in worksheets

   ws.drawingobjects.selete
next

とすると、全てのオブジェクトが消えてしまいますよね。shapes("Picture ●")のみを消去することはできますか?
教えてください。


 ループさせて、Typeプロパティで判定してみるとどうでしょうか?

  Sub test()
  Dim ws As Worksheet, shp As Shape
  For Each ws In Worksheets
    For Each shp In ws.Shapes
      If shp.Type = msoPicture Then
        shp.Delete
      End If
    Next shp
  Next ws
  End Sub

 (momo)

ありがとうございます。momoさん
うまくいきました。
nameプロパティでも判断できました。
発想が大事ですね。
Sub test()
  Dim ws As Worksheet, shp As Shape
  For Each ws In Worksheets
    For Each shp In ws.Shapes
      If instr(shp.name,"Picture") >0 Then
        shp.Delete
      End If
    Next shp
  Next ws
  End Sub


 >発想が大事ですね
 確かにTypeプロパティの存在を知らない方が自力でコードを考え、それなりの答えを
 出すことは大事なことですから、名前で判断するアルゴリズムに至ったことは
 これは、紛れもなく発想 なんでしょうねえ!!

 が、図形の名前は、ユーザーが自由に変えられます。
 例えば、

 Sub sample1()
    With ActiveSheet.Lines.Add(100, 100, 200, 200)
       .Name = "Picture line"
    End With
 End Sub

 まーさんが提示されたコードだと上記のラインも削除されてしまいます。
 このsample1で作成されたライン、momoさんのコードだと
 削除されません。図形のタイプで削除の有無を判断しているからです。
 Typeで調べる方が「マクロで写真のみをすべて消去したいのです。 」という仕様に
 対しては、より確実だということも確認しておいてください。

 「マクロで写真のみをすべて消去したいのです。」に関しては、

 Sub test2()
    Dim ws As Object
    For Each ws In Worksheets
       ws.Pictures.Delete
    Next ws
 End Sub

 こんな方法もあります。

 ichinose


 Pictures・・・
 オブジェクトブラウザで非表示のそんなコレクションがあったのですね。

 いつもながら参考になります m(_ _)m

 追記:
    テスト中に逆に変な使用(?)を見つけました。
    PicturesですとActiveXコントロールも入ってしまうのですね。

 (momo)

 >ActiveXコントロールも入ってしまうのですね。
 あらっ、本当だ、古いコレクションだからですね
 私のほうこそ、参考になりました。
 やっぱり、Typeですね!!

 ichinose


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.