top of page
検索

ExcelでVBA、写真の取り込み(Pictures.Insert メソッド、Shapes.AddPicture メソッド)

更新日:2021年2月4日

こんにちは。

先日、備忘録した「ExcelでVBA、Seleniumを使ってみた-(⑨出品一覧の取得)」では、出品している商品の写真をExcelシートに取り込んでいます。

そこでちょっとしたノウハウを活用していますので、その内容を備忘録しておきます。



■ 動作環境

 

OS: Windows 8.1

Excel: 2013

Chrome: 88.0.4324.104(2021.01.28知らないうちに更新されてました!💦)



■ 取り込んだイメージ

 

出品物によっては、複数の写真を掲載しているのですが、ここでは参考程度に貼るだけですので、「出品中」一覧に表示されている写真イメージを取得する仕組みにしています。



■ 写真の取り込み方法

 

ちょっと考えないといけないポイントは、次の2点です。

  • 写真を取り込むクラス/メソッドの選択

  • 図サイズの調整



■ 写真を取り込むクラス/メソッドの選択

 

選択肢は以下の2点です。


① Pictures.Insert メソッド

Excelシートへ画像を挿入する従来からの方法は、PicturesコレクションのInsertメソッドです。


「ボタン1」に仕込んだソースは、次のとおりです。

うーん、Insertメソッドを実行しただけで位置は操作していないのですが、「アクティブセルの左上隅」に合わせるような形で配置されました。

  • ActiveSheetではなく、特定シートを指定して実行すると、該当シートのA1セルに挿入される

  • 意図的に位置を操作したい場合は、取り込んだPictureオブジェクトのTopプロパティ、Leftプロパティで操作可能


また、取り込まれた図はリンクオブジェクトとして挿入されます。

よって、リンク元となる元の図が移動、または削除された場合は、次のとおり残念な感じになってしまいます💦



② Shapes.AddPicture メソッド

図を図その物として挿入するには、ShapesコレクションのAddPictureメソッドを使用します。AddPictureメソッドは、引数がたくさんあります&何れもマストです💦

  • FileName: 図を作成するファイルを指定します。

  • LinkToFile: リンクオブジェクトとして挿入する場合はTrue、コピーはFalseを指定します。

  • SaveWithDocument: 保存時図も一緒に保存する場合はTrue、それ以外はFalseを指定します。(もしLinkToFileがFalseの場合は、この引数をTrue に設定する必要あり)

  • Left: 図の左上隅の位置をポイント単位で指定します。

  • Top: 図の左上隅の位置をポイント単位で指定します。

  • Width: 図の幅をポイント単位で指定します。 (既存ファイルの幅を保持する場合は、-1を指定)

  • Height: 図の高さをポイント単位で指定します。 (既存ファイルの高さを保持する場合は、-1を指定)


参考までに、前述の「出品一覧」での、写真取り込み時のソースを紹介しておきます。

のちほど図のサイズは制御しますので、最小限の「Width:=0、Height:=0」で取り込んでいます。


※これ以降も同様ですが、「m_」で始まる英語大文字の変数名みたいな名称は、何れも私が別途定義している定数です。

※見慣れない関数について補足しておきます。(何れも自前関数です)

  • repDummy: 指定文字列(XPath)の特定箇所を、渡された番号に置き換え

    • downloadImage: 指定されたURLからイメージファイルをダウンロード

  • getItemID: 某フリマアプリ上の商品IDを取得



■ 図サイズの調整

 

大枠は前述のソースのとおりですが、Withで受け取っているPictureオブジェクトに対して、最後にHeightプロパティを制御しています。

縦横比率を管理しているLockAspectRatioプロパティにはTrueが設定されている前提なのを補足しておきます!



■ まとめ

 

いかがでしたでしょうか?

フリマアプリをコントロールするとなると画像操作も当たり前に発生しますので、このようなノウハウは押さえておきたいポイントですよね!^^

次回以降も、苦労した点を備忘録しようと思います。

閲覧数:3,754回0件のコメント

Comments


bottom of page