【エクセルVBA】AddPictureメソッドで挿入した画像にリンクを張る方法


Shapes-Addpicture-LinkToFile-eyecatch

皆様こんにちは、ノグチです。

前回は、 ShapesコレクションのAddPictureメソッドを使った画像ファイルをエクセルに貼り付ける方法と、その7つのパラメータについてご紹介しました。

エクセルVBAで画像ファイルをシートに追加するAddPictureメソッドの使い方
ShapesオブジェクトのAddPictureメソッドで、エクセルのシート上に画像を追加する方法をご紹介しています。画像のサイズや位置が決まっている場合、手動で調整するのは手間なもの。エクセルVBAで位置やサイズを指定しておけば、面倒な調整が不要になりますよ。

それぞれの役割については前回記事をご覧いただくとして、今回は、 LinkToFileパラメータの指定値によって、AddPictureメソッドで挿入した画像にリンクを張る方法をご紹介していきます。

スポンサーリンク

LinkToFileパラメータのおさらい

まずは前回のおさらいです。

このパラメータの指定値TrueとFalseを指定した場合の動作違いはこちら。

  • True
    Filenameパラメータで指定した画像ファイルにリンクが張られ、エクセルを起動するびにこの画像ファイルが読み込まれる
  • False
    Filenameパラメータで指定した画像ファイルから画像がコピーされてエクセルに貼り付けられる

ではどちらの指定値を使えば挿入した画像にリンクが張れるのか?を見ていきましょう。

LinkToFileパラメータで画像の表示方法を切り替える

ではLinkToFileパラメータの指定値の違いによる動作を見ていきましょう。

使うコードはこちら。

Sub 画像追加()
Dim strPath As String

    strPath = "C:\Users\user\Desktop\画像\ロゴ.png"
    
    Worksheets(1).Shapes.AddPicture _
        Filename:=strPath, _
        LinkToFile:=True, _
        SaveWithDocument:=True, _
        Left:=330, _
        Top:=40, _
        Width:=100, _
        Height:=80

End Sub

指定した画像ファイルにリンクを張って毎回読み込ませる場合

LinkToFileパラメータにTrueを指定すると、画像にリンクを張ることができます。

すると画像へのリンク情報がエクセルに保存されるので、リンク先の画像ファイルを同じ名前で別の画像にすると、次にエクセルを開いたときに別の画像が表示されます。

先のコードを使って、実際にやってみましょう。

まずは上のコードを実行して画像を表示しておいて…

エクセル,VBA,Shapes,AddPicture,LinkToFile,元画像

エクセルを上書き保存してから閉じておきます。

そして読み込み元の画像ファイルを同じ名前で別の画像に差し替えておきます。

エクセル,VBA,Shapes,AddPicture,LinkToFile,画像上書き

この状態で先程のエクセルを開くと…

エクセル,VBA,Shapes,AddPicture,LinkToFile,画像変更

この通り、新しい画像が表示されています。

このパラメータにTrueを指定しておいて、元の画像ファイルを差し替えていけば、VBAを修正することなくエクセルに表示する画像を変えることができます。

画像そのものがエクセルに保存されている訳ではなく、画像ファイルにリンクを張っているので、画像が頻繁に変更される…ということであればこちらの方法がよさそうですね。

指定した画像ファイルから画像をコピーしてエクセルに貼り付ける場合

折角なので、Falseを指定した場合の動作もご紹介します。

まずはLinkToFileパラメータにFalseを指定します。

更に、理由は後述しますが、 SaveWithDocumentパラメータの値をFalseにしてから、VBAを実行してエクセルに画像を表示しておきます。

エクセル,VBA,Shapes,AddPicture,LinkToFile,True

エクセルを上書き保存して閉じ、Trueを指定したとき同様に、 Filenameパラメータで指定した画像ファイルを同名で別の画像を差し替えておきます。

エクセル,VBA,Shapes,AddPicture,LinkToFile,True,画像上書き

この状態でエクセルを開いてみると…

エクセル,VBA,Shapes,AddPicture,LinkToFile,True

この通り、元の画像ファイルが表示されています。

エクセルに表示する画像が変わることがない、又はメールで色々な人に送信する必要がある、といった場合にはこちらが便利そうです。

LinkToFileパラメータにFalseを指定する場合の注意点

注意点として、この LinkToFileのパラメータの値をFalseに指定する場合は、 SaveWithDocumentパラメータの値は必ずTrueにする必要があります

もしも LinkToFileにFalse、 SaveWithDocumentにもFalseを指定してVBAを実行すると…

エクセル,VBA,Shapes,AddPicture,LinkToFile,SaveWithDocument

このように、「指定された値は境界線を越えています」という、一見すると画像を表示させようとしている位置がおかしいのかな?と思ってしまうような実行時エラーが表示されます。

LinkToFileがFalseの場合、画像はコピーされてエクセルに表示されることは先にご紹介した通りです。

なのにSaveWithDocumentでFalseを指定してしまうと、画像がエクセルに保存されず、かつ画像へのリンク情報も保存されない。

よって画像が表示できなくなってしまう…ということでエラーになるのかな?と考えれば納得なのですが、なにゆえこのエラーメッセージなのか…。

もう少し分かりやすいエラーメッセージにしてくれると助かるんですけどね。

まとめ

今回は、ShapesコレクションのAddPictureメソッドのパラメータ、 LinkToFileの指定値によって画像にリンクを張る方法と、パラメータに指定する値によって画像の表示方法がどう変わるのか?をご紹介しました。

エクセルの使い方や、画像ファイルが差し変わる頻度などによってパラメータに指定する値を使い分けることで、画像の操作がより簡単にできそうですね。

次回からは、AddPictureメソッドを使って、フォルダ内の画像をすべてエクセルに張り付ける方法をご紹介していきます。

エクセルVBAで大量の画像をまとめてシートに貼り付けるAddPictureメソッドの使い方
AddPictureメソッドとFileSystemオブジェクトを使って、指定したフォルダにある画像をまとめてエクセルシートに貼り付ける方法をご紹介しています。 この方法で、画像のサイズや位置調整のような面倒なことはVBAに任せてしまいましょう!画像の貼り付け漏れだって防げます。

それでは、最後までお読みいただきありがとうございました!

連載目次:エクセルVBAで図形を操作するShapeオブジェクトの使い方

画像、オートシェイプ、グラフ、テキストボックス、ワードアート、ボタン…エクセルでは様々なものをシートに配置できますが、これらのアイテムは全てShapeオブジェクトです。これら、Shapeオブジェクトの挿入や配置など、自在に操作する方法をお伝えしていきます。
  1. エクセルVBAで画像やオートシェイプなどを操作するShapeオブジェクトのはじめの一歩
  2. エクセルVBAで画像ファイルをシートに追加するAddPictureメソッドの使い方
  3. 【エクセルVBA】AddPictureメソッドで挿入した画像にリンクを張る方法
  4. エクセルVBAで大量の画像をまとめてシートに貼り付けるAddPictureメソッドの使い方

タイトルとURLをコピーしました