• 締切済み

VBAで抽出した画像の数枚をフォームに表示

VBAで指定したURLにある画像を抽出し、その画像をExcelシートに貼るものを作りましたが、そのうち3枚くらいをユーザフォーム上にも表示したいのですが、どのように記述したらよいでしょうか? 教えていただけたら幸いです。

みんなの回答

回答No.1

こんにちは。 Q9322829の続きとして回答します。 > VBAで指定したURLにある画像を抽出し、その画像をExcelシートに貼るものを作りましたが、 Q9322829にてご提示の記述は、 自PC内にファイルとしてを画像を取り込むのではなく、 画像のURLだけを扱って、直接シート上に図を挿入するというものですね。 となると、 > そのうち3枚くらいをユーザフォーム上にも表示したいのですが、 WebBrowserコントロールでNaviするぐらいかな、と思いますが、 この方法だとフォームのデザインで難儀するかも知れません。 ファイルとして取り込んであれば、 Imageコントロール等を配置して、 .Image1.Picture = LoadPicture("ファイルパス") みたいに簡単な処理で済ますことが出来ますし、 画像のサイズ指定や、フォームのデザインについても融通が利きます。 ですので、一旦は、Q9321989に立ち戻って、 画像ファイルをダウンロードする方法について再検討された方が、 今後の機能追加を考えると有利になる場面が多いとは思います。 ただ、今回は今回の、ご要望に素直にお応えすることにします。 Q9322829での、 > まず、下準備として、ご提示のコードの直下に、 >   DoEvents >   s.AlternativeText = e.href > 以上の2行を書き加えてから画像を取り込んでください。 > これによって、挿入された図の属性として、 > 画像のURLを保持します。 を前提(must です)としています。 ユーザーフォームのコントロールをデザインします。  UserForm1  ┣ WebBrowser1  ┣ WebBrowser2  ┗ WebBrowser3 コントロールの名前に齟齬が生じないように、 必要なら、下記コード側のオブジェクト名を書換えてください。 以下、UserForm1の  WebBrowser1、WebBrowser2、WebBrowser3 に、シート上の図の内、 .AlternativeTextに"*.jpg" "*.jpeg"を登録してある画像の 最初に見つかる3点 を表示する記述です。 ' ' // Sub Re9322886w() Dim colCtrl As MSForms.Controls Dim s As Shape Dim cnt As Long   Load UserForm1   Set colCtrl = UserForm1.Controls   For Each s In ActiveSheet.Shapes     If s.AlternativeText Like "*.jpg" Or s.AlternativeText Like "*.jpeg" Then       cnt = cnt + 1       With colCtrl("WebBrowser" & cnt)         .Visible = True         .Navigate s.AlternativeText         Do While .Busy Or .ReadyState < 3           DoEvents         Loop       End With     End If     If cnt = 3 Then Exit For   Next   UserForm1.Show End Sub ' ' // 他、 仮に、3つではなく、1つでもよければ、図をコピーして Imageコントロール上に表示させることもできます。 或いは、 Excelブックを保存してある圧縮フォルダを解凍するなどして、 Imageコントロール3つに表示させることもできます。 しかし、どちらも、難度は高く、また、処理が不安定な面も持ちます。 ということで、今回は、 WebBrowserコントロールでの表示方法のみ紹介しましたが、 お奨めは画像ファイルをダウンロードする設計、ということになります。 以上です。

関連するQ&A