• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:画像をDLするコードが動かない)

画像をDLするコードが動かない

このQ&Aのポイント
  • VBAを使用してWEBサイトから画像データをダウンロードするコードが動作しない
  • 特定のループでエラーが発生し、解決策がわからない
  • 公式サイトから入手したサンプルコードでも同じエラーが発生する

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 書籍は読んでいませんけれど、 此処でご提示の記述は、ちょっとおかしいですね。 私の環境でも、同じ状態になります。 .Hyperlinks(1) を NewWindow で .Follow する ということなら、それは、obIEとは無関係ですし、 obIE は 何も操作していない状態ですから、 何もない空っぽのページを 処理しようもないです。 一般論として、方法はだいたい2通りあります。  ●.Hyperlinks(1).Follow した結果として開かれる    新しいIEオブジェクトを捉え直す。  ●.Hyperlinks(1).Follow の代りに URLを指定して     URLを指定して obIE.navigate する 後者の例でお答えします。 修正箇所を★印で示します。 以下の修正を加えてから実行する限りでは、正常にダウンロードできること を、確認しました。 Sub ファイルをダウンロード()   Set obIE = CreateObject("InternetExplorer.Application") '変数の定義を行います   obIE.Visible = True '決まり文句。IEを見えるようにします '  Range("Sheet1!$b$1").Hyperlinks(1).Follow NewWindow:=True '画像を取得したいページを新しいウィンドウで開きます ' ★トル   obIE.navigate Sheets("Sheet1").Range("B1").Hyperlinks(1).Address ' ★変更 '  Sleep (2000) ' ★トル   ' Do While obIE.ReadyState <> 4 '決まり文句。サイトが開くまで待ちます   Do While obIE.Busy = True '決まり文句。サイトが開いてなければ、繰り返し待ちます     Sleep (10) ' ★追加   Loop   ' Loop   For Each Obj In obIE.document.images '表示されているサイトのイメージタグを一つずつ、変数objにセット     Rtn_del = DeleteUrlCacheEntry(Obj.href) 'ダウンロード対象のキャッシュをクリアします     Rtn_Down = URLDownloadToFile(0, Obj.href, "c:\test\" + Obj.Nameprop, 0, 0)   'ファイルをCドライブのtestというフォルダにダウンロード   Next '次のタグを処理します End Sub

wine38
質問者

お礼

レスを頂きありがとうございます! ご教示の方法で無事正常動作致しました。 やはりもとのソースがおかしかったのですね……。 初学者はこういう事態に立ち至るとデッドエンドなので、今回大変助かりました。 どうもありがとうございました!

その他の回答 (1)

noname#212067
noname#212067
回答No.1

>Do While obIE.ReadyState <> 4 '決まり文句。サイトが開くまで >待ちます >をコメントアウトしたところ、先に進みましたが、 先に進みますが、IEの処理が終わってない状態で次に行くので 「実行時エラー '-2147467259(80004005)':'Document'メソッドは失敗しました: :IWebBrouser2'オブジェクト が発生してしまいます。 この部分は、本来ならIEが、ホームページの読込みを、完全に終わったあと obIE.ReadyStateが4になって抜けるはずなのですが、機能しないようです IEのバージョン等の問題かと思うのですが Do Until obIE.StatusText Like "*ページが表示されました*" Do Until obIE.Busy = False なんかで、置き換えてみてください

wine38
質問者

お礼

レスを頂きありがとうございます! >Do Until obIE.StatusText Like "*ページが表示されました*" >Do Until obIE.Busy = False >なんかで、置き換えてみてください Do While obIE.ReadyState <> 4 '決まり文句。サイトが開くまで待ちます Do While obIE.Busy = True '決まり文句。サイトが開いてなければ、繰り返し待ちます をそれぞれ置き換えてみましたが、 Do Until obIE.StatusText Like "*ページが表示されました*" の行で、「実行時エラー '-2147467259(80004005)':'Document'メソッドは失敗しました: :IWebBrouser2'オブジェクト……」が発生してしまいました……。

関連するQ&A