- 締切済み
VBAで抽出した画像の数枚をフォームに表示
VBAで指定したURLにある画像を抽出し、その画像をExcelシートに貼るものを作りましたが、そのうち3枚くらいをユーザフォーム上にも表示したいのですが、どのように記述したらよいでしょうか? 教えていただけたら幸いです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
こんにちは。 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コントロールでの表示方法のみ紹介しましたが、 お奨めは画像ファイルをダウンロードする設計、ということになります。 以上です。