[[20100828231630]] 『使い方の違いを教えてください』(nimu) ページの最後に飛ぶ

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

 

『使い方の違いを教えてください』(nimu)
 Pictures.Insertとaddpictureの違いや使い分けについて教えてください。

他所のサイトですけど(汗)。

モーグ - 画像ファイルを挿入する
http://www.moug.net/tech/exvba/0120020.htm

『Excel97以降は隠しオブジェクトとなっているPictureオブジェクトに対してInsertメソッドを使用すれば...』と書かれています。

それと、↓によると

モーグ - Excel (VBA)Re:PicturesクラスのInsertメソッド のY.Tさんへ
http://www.moug.net/faq/viewtopic.php?t=51052

2007では使わないほうがよい... となってますね。

隠されているだけに、メンテナンスもされていないのかも...

(ramrun)


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

 ついでの質問で申し訳ないのですが,範囲内の図形を消去するための
 図形の指定の仕方も教えていただければと思います。(nimu)

 > Pictures.Insertとaddpictureの違いや使い分け
  Pictures.InsertもShapes.Addpictureも指定されたファイルから画像を挿入する
 という基本的な機能は、同じです(画像をブックに取り込むか否かの指定が
 Shapes.Addpictureでは可能)。

 Pictures.Insertでは、挿入された画像を操作するオブジェクトととして、
 Pictureオブジェクトが作成され、
 Shapes.Addpictureでは、Shapeオブジェクトが作成されます。

 同じ画像を操作するのに、一方はPictureオブジェクトを使い、もう一方は、
 Shapeオブジェクトを通して画像を操作することになります。

 よって、このご質問は、Pictureオブジェクト(Picturesコレクション)と
 Shapeオブジェクト(Shapesコレクション)の違いと言ってもよいでしょうか!!

 概して、Pictureオブジェクトの方が扱いが簡単、コレクションも殆ど画像だけの
 コレクションが取得できる(これにより、Pictures.DeleteやPictures.Selectなど
 処理が簡潔に記述できることがあります)。また、古いオブジェクトのため
 バグも少ない。

 対して、Shapeオブジェクトは、図形全体を網羅しているためプロパティやメソッドが
 多いので扱いが面倒、Shapesコレクションにはいくつかのバグも報告されている。
 しかし、新しいオブジェクトのため、Pictureではできないことが可能
 (例えば、ボーダー線の色など複雑な色指定がRGB関数などを通して可能)。

 私個人は、Pictureオブジェクトを使うことが多かったですが、
 このサイトでも
[[20100310113644]]
[[20100807114935]]

 等Shapeオブジェクトを使った解決方法も出てきています。

 よって、二つの方法をうまく使いわけるのがよいでしょうね
 ichinose

 


 >範囲内の図形を消去するための
 この範囲内の定義がよくわかりませんが、
 1 複数の選択した図形を削除するなら、

 Sub select_del()
    On Error Resume Next
    Selection.Delete
    On Error GoTo 0
 End Sub

 2 指定されたセル範囲内に存在する図形を削除するなら、

 Sub del_obj()
    Dim obj As Object
    Dim rng As Range
    On Error Resume Next
    Set rng = Selection
    If Err.nunber = 0 Then
       With ActiveSheet
          For Each obj In .DrawingObjects
             If Not Application.Intersect(rng, _
                      .Range(obj.TopLeftCell, obj.BottomRightCell)) _
                      Is Nothing Then
                obj.Delete
             End If
          Next
       End With
    Else
       MsgBox "削除範囲をセル範囲で指定してください"
    End If
    Set rng = Nothing
    Set obj = Nothing
    On Error GoTo 0
 End Sub

 3 指定されたセル範囲内に存在する画像を削除する(オートシェイプなどは対象外)なら、

 Sub del_pic()
    Dim obj As Picture
    Dim rng As Range
    On Error Resume Next
    Set rng = Selection
    If Err.nunber = 0 Then
       With ActiveSheet
          For Each obj In .Pictures
             If Not Application.Intersect(rng, _
                      .Range(obj.TopLeftCell, obj.BottomRightCell)) _
                      Is Nothing Then
                obj.Delete
             End If
          Next
       End With
    Else
       MsgBox "削除範囲をセル範囲で指定してください"
    End If
    Set rng = Nothing
    Set obj = Nothing
    On Error GoTo 0
 End Sub

 どれかでいけそうですか?

 ichinose


ichinoseさん丁寧な回答ありがとうございました。
 Pictures.Insertとaddpictureの違いはわかりました。
 範囲内の図形の消去の件ですが,理解して使いたいと思っています。
 For Each obj In .Pictures
             If Not Application.Intersect(rng, _
                      .Range(obj.TopLeftCell, obj.BottomRightCell)) _
                      Is Nothing Then
                obj.Delete
 ここの部分(2でも同じ)を本等でいろいろ調べてみましたが今一ピンときません。
 結局選択した範囲と画像のあるセルが共有部分の時には消去という理解でいいのでしょうか?
(nimu)


『今一ピンときません』のあたりについて憶測で。

>結局『選択した範囲』と『画像のあるセル』が共有部分の時には消去という理解でいいのでしょうか?

ここでの『選択した範囲』というのは、正確には『選択したセル範囲』ですよね?

セル範囲を選択してキーボードのDelキーを押しても、そのセル範囲上の画像は消えないでしょ?

要するにセルと画像には結びつきがないのですよ。

(ramrun)これでわかる?


 >結局選択した範囲と画像のあるセルが共有部分の時には消去という理解でいいのでしょうか?

 選択したセル範囲と画像のあるセル範囲に共有部分があれば、消去 ですね!!
 選択セル範囲に完全に収まっていなくても かすっていれば、消去します。
 図形の削除仕様としては、よく使われている仕様ですから納得して使ってください。

 ichinose


コメント返信:

[ 一覧(最新更新順) ]


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