VBAで画像ファイルをダウンロードする方法

このQ&Aのポイント
  • VBAを使用して画像ファイルをダウンロードする方法がうまくいかず、エラーが発生してしまいます。
  • 参考サイトを元にVBAを使って画像ファイルのダウンロードの練習をしていますが、Retの値が-2147221020となり、正常に動作しません。
  • Retの値が0にならない原因と修正方法について教えてください。
回答を見る
  • ベストアンサー

VBAで画像ファイルをダウンロードしたいけどうまく

VBAで画像ファイルをダウンロードしたいけどうまく行かない・・・ XPで、オフィス2003です。 http://officetanaka.net/other/extra/tips01.htm を参考に、画像ファイルをダウンロードする練習をしているのですが "エラーが発生しました"になってしまいます。 標準モジュールに --------------------------------------------------------- Option Explicit Public Declare Function URLDownloadToFile Lib "urlmon" _ Alias "URLDownloadToFileA" (ByVal pCaller As Long, _ ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long Sub Sample() GetImageFile "http://www.officetanaka.net/sample.jpg", "C:\sample.jpg" End Sub Sub GetImageFile(ImgName As String, SaveName As String) Dim SaveFileName As String, DownloadFile As String, Ret As Long Ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0) If ImgName = "" Then Exit Sub SaveFileName = SaveName DownloadFile = ImgName Ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0) If Ret = 0 Then MsgBox "ダウンロードできました" Else MsgBox "エラーが発生しました" End If End Sub --------------------------------------------------------- を貼り付けました。 Retが0にならなくてはいけないみたいですが、 自分の場合は、-2147221020になってしまいます。 どう修正すればいいのか教えてください。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Sub Sample()  GetImageFile "http://www.officetanaka.net/sample.jpg", "C:\sample.jpg" End Sub が呼び出す以下で Sub GetImageFile(ImgName As String, SaveName As String)  Dim SaveFileName As String, DownloadFile As String, Ret As Long  Ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0) GetImageFileの引数 ImgName  と SaveName を URLDownloadToFileに渡してない?  Dim SaveFileName As String, DownloadFile As String, Ret As Long  ’以下2行を追加  DownloadFile = ImgName  SaveFileName = SaveName  Ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0) か  Dim Ret As Long  ’以下の第2引数と第3引数を編集  Ret = URLDownloadToFile(0, ImgName, SaveName , 0, 0) じゃないですか?

wery32fd
質問者

お礼

回答ありがとうございました。

その他の回答 (1)

回答No.2

URLが間違っている? そのページのソースを見ると、画像は.「./img/blog.jpg」のようになっているのでは??

wery32fd
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • subまたはfunctionが定義されていません。

    エクセル2010で下記コードの矢印の部分でエラーが出てしまいます。 ほぼネットで見つけたコードそのままですが矢印のところで題記のエラーが出てしまいます。 内容はトヨタのホームページの燃料電池車の画像を保存するはずなのですが・・・ どなたかご存知の方ご教示いただけますでしょうか??? Sub aaa() GetImageFile "http://toyota.jp/sp/image/e_bn/", "FCV_20140625.jpg" End Sub Sub GetImageFile(ImgName As String, SaveName As String) Dim SaveFileName As String, DownloadFile As String, Ret As Long If ImgName = "" Then Exit Sub SaveFileName = SaveName DownloadFile = ImgName Ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0) ’←ここです If Ret = 0 Then MsgBox "ダウンロードできました" Else MsgBox "エラーが発生しました" End If End Sub

  • EXCEL VBAでWEBページ保存2

    何度もお世話になります、よろしくお願いいたします。 本日、EXCEL VBAでWEBページを完全保存する方法を質問して 下記を紹介していただきました。 Option Explicit Private Declare Function URLDownloadToFile Lib "urlmon" Alias _ "URLDownloadToFileA" ( _ ByVal pCaller As Long, ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserved As Long, _ ByVal lpfnCB As Long) As Long -------------------------------------------------------------------------------- Sub DownloadFileFromWeb() Const strUrl As String = "http://www.puremis.net/excel/index.shtml" Dim strSavePath As String Dim returnValue As Long strSavePath = ThisWorkbook.Path & "\" & "Test.htm" returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0) If returnValue = 0 Then MsgBox "Sccess!" Else MsgBox "Did not success." End If End Sub ------------------------------------------------- この状態だと動作は完璧なんですが たくさんのWEBページを保存するようにVBAを組みたいので HPアドレスの部分に変数を使いたいのです。 この部分です:Const strUrl As String = "http://www.puremis.net/excel/index.shtml" でも変数を使うとエラーになってしまうので困り果てております。何か良い方法はございませんでしょうか。 よろしくお願いいたします。

  • VBAでIEの「ファイルのダウンロード」ダイアログを制御

    VBではなくVBAにて、IEの「ファイルのダウンロード」ダイアログを制御したいと思い、過去の同様の質問等を参考に下記のソースを作成して動かしてみましたが、「ファイルのダウンロード」画面で、「保存(S)」ボタンのハンドルを取得するところまではできましたが、sendMessageでクリックができず、次に進むことが出来ませんでした。 手動で「保存(S)」ボタンを押下して、強制的に「名前を付けて保存」画面に遷移させた後プログラムを再開すると、同画面の「保存(S)」ボタンのクリックはできました。 同じロジックで「名前を付けて保存」画面の「保存(S)」は動くのに、「ファイルのダウンロード」画面の「保存(S)」が動かないのはなぜでしょうか。 どなたかおわかりになる方がいらっしゃいましたら、ご回答をお願いします。 ***使用環境*** OS: XP pro IE: 6 OFFICE:2002 ***以下作成したソース(エラー制御は省略)*** Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetDlgCtrlID Lib "user32" (ByVal hwnd As Long) As Long Private Sub Test() Dim ret1 As Long Dim ret2 As Long Const WM_COMMAND As Long = &H111 ret1 = FindWindow("#32770", "ファイルのダウンロード") ret2 = FindWindowEx(ret1, 0, "Button", "保存(&S)") Call SendMessage(ret1, WM_COMMAND, GetDlgCtrlID(ret2), ByVal ret2) ret1 = FindWindow("#32770", "名前を付けて保存") ret2 = FindWindowEx(ret1, 0, "Button", "保存(&S)") Call SendMessage(ret1, WM_COMMAND, GetDlgCtrlID(ret2), ByVal ret2) End Sub ***以上ソース終わり***

  • ネットのファイルをダウンロードする方法を教えてください。

    web上のファイルをダウンロードするには Public Declare Function URLDownloadToFile Lib "urlmon" _ Alias "URLDownloadToFileA" (ByVal pCaller As Long, _ ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long と宣言してURLDownloadToFileを使えばできることがわかりましたが、うまく行かないケースがあります。おそらく通常の右クリックでダウンロードするものではなく、URLを左クリックして行うものだからじゃないかと思います。いいアイディアはないでしょうか??

  • FindWindowについて

    APIにFindWindowってありますよね。 MSDNには、Windowが見つからなかったらNULLを返すとありますが、以下のソースではNULL(0)が返ってきません。この理由を教えてください。 '宣言部 Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 'コード内 Dim ret As Long   ret = FindWindow(vbNullString, "テスト")   If ret = 0 Then     MsgBox("なし")   End If でret =767863736466669568になる。 ちなみに「テスト」というウィンドウなんてありません。 環境は、XP、VB.net2003です。 困っています。よろしくお願いいたします。

  • ファイルを開いて1回しか再生されない

    VBAで音楽を鳴らしたいのですが、 ファイルを立ち上げて音楽を鳴らすプロシージャーを一度実行すると、 もう何度F5を押しても実行されません。 しかしファイルを開きなおすとまた実行できます。でも1回限りです。 コードはこちらです。 ------------------------------------------------------------ Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _ (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _ ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Sub PlaySound() Dim SoundFile As String, rc As Long SoundFile = "C:\【音楽】\test.mp3" If Dir(SoundFile) = "" Then MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation Exit Sub End If SoundFile = Chr(34) & SoundFile & Chr(34) rc = mciSendString("Open " & SoundFile, "", 0, 0) rc = mciSendString("Play " & SoundFile, "", 0, 0) End Sub ------------------------------------------------------------ 2回目実行した際音楽が鳴らないからってファイルがありませんと表示されるわけでもないです。 当方の環境はOSWIN7、OFFICE2007です。 ご回答よろしくお願いします。

  • 引数で戻り値を取得するプログラム

    以下のように、引数で戻り値を取得するプログラムを書きたいのですが どのように書けば正しいでしょうか? VB6とVB2005の両方の書き方を教えてください。 sub kekka(byval src as string, byref dst() as string) dim ret() as string ret(0) = "abc" ret(1) = "efg" kekka = ret end sub kekka("xxx", dat() ) msgbox(dat(0)) msgbox(dat(1))

  • エクセルVBAを教えて下さい

    エクセルの表で -AB C D E F 1年月--1801 2------ 3------ 4------ (-)は空欄でセルE1=18、F1=1とします。 コントロールボックスをつかって Private Sub Command登録_Click() Dim d1 As Long Dim d2 As Long Dim ret As Variant Dim FindValue As String Dim TotalAddress As String If Range("E1").Value = "" Or Range("F1").Value = "" Then MsgBox "該当する場所にデータが入っていません。", vbCritical Exit Sub End If d1 = Range("A65536").End(xlUp).Offset(1).Row d2 = Range("B65536").End(xlUp).Offset(1).Row FindValue = """" & Range("E1").Value & Range("F1").Value & """" TotalAddress = Range("A1").Resize(d1).Address & "&" & Range("B1").Resize(d1).Address ret = Evaluate("MATCH(" & FindValue & "," & TotalAddress & ",0)") If IsError(ret) Then Cells(d1, 1) = Range("E1").Value Cells(d2, 2) = Range("F1").Value Else MsgBox "既に同じ組み合せがあります。", vbInformation End If End Sub というものを作ったのですが、E1=18、F1=1及びコマンドボタンを別シートに作成し、上記の表への登録をできるようにしたいのですが、なにかいい方法はありませんか?

  • vb6.0でwavファイルの終了を監視する方法について

    お世話になります。 vb6.0でwavファイルを再生するプログラムを作成しております。 下記にコードを記述させていただきます。 Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String _ , ByVal lpstrReturnString As String _ , ByVal uReturnLength As Long _ , ByVal hwndCallback As Long) As Long Private Sub MSComm1_OnComm() '演奏が終了しているか確認 If LCase$(Left$(mciSendString("Status MIDI1 mode", "", 0, 0), 7)) = "stopped" Or _ LCase$(Left$(mciSendString("Status MIDI1 mode", "", 0, 0), 7)) = "0" Then ←(1) Dim ret As Long ret = mciSendString("stop midifile ", "", 0, 0) ret = mciSendString("close midifile", "", 0, 0) ret = mciSendString("open """ & P_PLIST_WARNING & """", "", 0, 0) ret = mciSendString("play """ & P_PLIST_WARNING & """ from 0 wait", "", 0, 0) ret = mciSendString("stop """ & P_PLIST_WARNING & """", "", 0, 0) ret = mciSendString("close """ & P_PLIST_WARNING & """", "", 0, 0) End If End Sub wavファイルを再生するにあたり、まず再生されていない状態を確認してから、再生したいと考えています。 しかしながら、(1)のコードで戻り値が"stopped"または"0"ではなく、"263"で返ってきており、停止を監視できず困っております。 お手数ですが、ご教授いただきたく宜しくお願い申し上げます。

  • VB6でのmmioOpen関数の使い方

    VB6でwaveファイルから音の波形を取得するプログラム を作りたいと思っているのですが、mmioOpen関数の使い方 が分からずに困っています。とりあえず現在の状況を書くと、 Private Declare Function mmioOpen Lib "winmm.dll" Alias "mmioOpenA" (ByVal szFileName As String, lpmmioinfo As MMIOINFO, ByVal dwOpenFlags As Long) As Long Private Declare Function mmioClose Lib "winmm.dll" (ByVal hmmio As Long, ByVal uFlags As Long) As Long Private Type MMIOINFO dwFlags As Long fccIOProc As Long pIOProc As Long wErrorRet As Long htask As Long cchBuffer As Long pchBuffer As String pchNext As String pchEndRead As String pchEndWrite As String lBufOffset As Long lDiskOffset As Long adwInfo(4) As Long dwReserved1 As Long dwReserved2 As Long hmmio As Long End Type Dim p1 As MMIOINFO Dim h As Long Dim closewav As Long Private Sub Command1_Click() openfilename = "C:\sample.wav" 'WAVEファイルを開く h = mmioOpen(openfilename, p1, MMIO_READ) MsgBox h If h <> 0 Then MsgBox "WAVEファイルのオープンに失敗" End If 'WAVEファイルを閉じる closewav = mmioClose(h, MMIO_FHOPEN) MsgBox closewav End Sub だれか分かる方がいれば、間違っている箇所、やり方などを教えてください。 よろしくお願いします。

専門家に質問してみよう