[[20100324130207]] 『URLの画像を自動で保存』(みっこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『URLの画像を自動で保存』(みっこ)
ExcelでA列に画像URLがあるとします。URLの画像を取得してB列にあるファイル名で保存する事は可能ですか?(尚且つ保存先フォルダをC列でパスで指定)

データが何千件もあるので、1つ1つ手作業でURLを開き、名前をつけて保存をやっているとかなり効率が悪いもので…

画像はjpg、gif形式です。Excel2007 Windows7を使用しています。どうぞ宜しくお願いいたします<(_ _)>

a列         B列     C列

http〜test.jpg  ab01.jpg c:\Docment〜\[ユーザー名]\


 APIを使ってみましたが、こんな感じでしょうかね?

 標準モジュールに貼り付けてください。

  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 test()
  Dim tbl As Variant, i As Long, returnValue As Long
  Dim myDownURL As String, mySaveName As String
  tbl = Range("A1").CurrentRegion.Value
  For i = 1 To UBound(tbl)
    myDownURL = tbl(i, 1)
    mySaveName = tbl(i, 3) & tbl(i, 2)
    returnValue = URLDownloadToFile(0, myDownURL, mySaveName, 0, 0)
  Next i
  MsgBox "完了しました。"
  End Sub

 (momo)


Sub 画像保存()
  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 test()
  Dim tbl As Variant, i As Long, returnValue As Long
  Dim myDownURL As String, mySaveName As String
  tbl = Range("A1").CurrentRegion.Value
  For i = 1 To UBound(tbl)
    myDownURL = tbl(i, 1)
    mySaveName = tbl(i, 3) & tbl(i, 2)
    returnValue = URLDownloadToFile(0, myDownURL, mySaveName, 0, 0)
  Next i
  MsgBox "完了しました。"
  End Sub

すみません、マクロは超初心者なもので(><)上記のとおりにマクロのコードを記述するところに貼り付けて実行しましたが、以下のようなエラーが出てしまいました。
何か記述ミスがあるのでしょうか??

エラー:
End Sub,End Function またはEnd Property 以降には、コメントのみが記述できます。


 全部見ていませんが、
 >Sub 画像保存() 
 これを削除してください。

 これで提示されたエラーはなくなります。

 ichinose


回答ありがとうございます。言われたように、>Sub 画像保存()
を削除して実行しましたが、マクロ実行後すぐに「完了しました」のメッセージが出るのですが、指定したフォルダ内に画像はひとつも保存されていませんでした(TT)エラーはでなくなりましたが、正常に画像が保存されないようです。。。

 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 test()
  Dim tbl As Variant, i As Long, returnValue As Long
  Dim myDownURL As String, mySaveName As String
  tbl = Range("A1").CurrentRegion.Value
  For i = 1 To UBound(tbl)
    myDownURL = tbl(i, 1)
    mySaveName = tbl(i, 3) & tbl(i, 2)
    returnValue = URLDownloadToFile(0, myDownURL, mySaveName, 0, 0)
  Next i
  MsgBox "完了しました。"
  End Sub

 momoさんのマクロで保存できましたよ。
 みっこさんが提示されたように
 A列=URL、B列=保存ファイル名、C列=保存先
 のフォーマットになっていますか?

 また、保存先のパスの最後に「\」はついていますか?
 つけなかった場合、ひとつ上のフォルダに保存されるみたいです。
 (てつろう)

フォーマットもあっておりますし、\もつけております。
ちょっと見ずらいですが、ファイルは以下のような感じで1行目にはタイトルがあります。(見やすいように1レコード毎に改行しております。)

写真小(サムネイル)URL  ファイル名   保存場所

http://image.d-064.com/products/images/samnail/1447287   1447287.jpg C\

http://image.d-064.com/products/images/samnail/408775   408775.jpg  C\

http://image.d-064.com/products/images/samnail/408774   408774.jpg  C\

http://image.d-064.com/products/images/samnail/408773   408773.jpg  C\


 データが投稿どおりなら・・・・、
 C列を  C\  −−−−−−> C:\ 

 にしないとね!!

 ichinose


ichinoseさん、ご回答ありがとう御座います。
私の基本的な記述ミスでした(><)
で、そこの個所をC:\に正しく修正して再度実行したのですが…これまた保存ができなかったんですよ。。。

何でなんでしょう。。。

ファイルはエクセル形式でtest.xlsで保存しています。

(みっこ)


 保存先を「C:\WK\」のようにルートではなくフォルダにした場合は保存できますか?
 (そもそも手作業で保存する場合に「C:\」に保存できますか?)
 (独覚)

独覚さん、ご回答ありがとうございます。
手作業の場合でもC:\に保存する事はできます。
「C:\WK\」のように既存フォルダを指定した場合でも同じ結果でした(><;)
(みっこ)

 皆様フォローありがとうございます。

 ん〜 あとは引っかかる所といえば
 >Windows7
 という所でしょうか? 環境が無いので確認できませんが・・・

 Windows7にurlmon.dllが無いとか?(そんな訳無いと思いますが)
 urlmon.dllを検索かけて存在しているか確認してみてください。
 APIが使えないと何もできないコードなので。

 あとは・・・URLやファイル名、パスに余分なスペースが入っているとか。

 (momo)

XPモードで試したのですが、出来ました!
皆さん、本当にありがとうございます!

しかしここで新たな問題にぶつかったのですが…保存された画像を確認したら1000件中200件程、リンクエラーのため、正常に画像が保存されなかったものがありました。どのファイルが保存されたのか把握しないといけないのですが、例えば、保存された画像は、D列に”○”と入力する…といった事は可能でしょうか??
(みっこ)


 ダウンロードが成功すると変数returnValueに0が返りますので
 それを判定条件に○を入れます。

  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 test()
  Dim tbl As Variant, Ans() As String, i As Long, returnValue As Long
  Dim myDownURL As String, mySaveName As String
  tbl = Range("A1").CurrentRegion.Value
  ReDim Ans(1 To UBound(tbl), 1 To 1)
  For i = 1 To UBound(tbl)
    myDownURL = tbl(i, 1)
    mySaveName = tbl(i, 3) & tbl(i, 2)
    returnValue = URLDownloadToFile(0, myDownURL, mySaveName, 0, 0)
    If returnValue = 0 Then
      Ans(i, 1) = "○"
    End If
  Next i
  Range("D1").Resize(UBound(Ans)).Value = Ans
  MsgBox "完了しました。"
  End Sub

 (momo)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.