[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『使い方の違いを教えてください』(nimu)
Pictures.Insertとaddpictureの違いや使い分けについて教えてください。
『Excel97以降は隠しオブジェクトとなっているPictureオブジェクトに対してInsertメソッドを使用すれば...』と書かれています。
それと、↓によると
2007では使わないほうがよい... となってますね。
隠されているだけに、メンテナンスもされていないのかも...
(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
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.