VBA : WEB(http)先からファイル一括ダウンロード

あるネットワーク上のファイル(今回はZIP)を一括ダウンロードする
前提:

  • 対象のファイルは同一URL配下に保管されている
  • 対象のファイルは複数ある
  • ダウンロード先(格納先)は固定で決まっている
  • 結果レポートも出力する

手順:

  • ソースに下記の修正を加える
  • コピー元のURLを指定(末尾は/で終わること)
  • コピー先のフォルダを指定(末尾は\で終わること)

下記説明:

  • 対象のファイル名リストを”_copy_list.txt”に格納し、そのファイルを”c:\temp\download\”に格納
  • 実行結果は、同フォルダ内に”_report.txt”として作成される(各行の1文字目が0なら成功)
  • 上記ファイル群が格納されているURLを準備”http://~~~~~~/~~~~~/”
  • あとは実行するだけ
'URLDownloadToFile 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 batch()

	Dim strFNAME As String, strSRC_FILE As String
	Dim strRET As Variant
	strFNAME = "c:\temp\download\"
	
	Open strFNAME & "_copy_list.txt" For Input As #1
	Open strFNAME & "_report.txt" For Output As #2
	
	Do While Not EOF(1)
		Line Input #1, strSRC_FILE
		
		strRET = download(strSRC_FILE, strFNAME & strSRC_FILE)
		Print #2, strRET & vbTab; strSRC_FILE
		Debug.Print strSRC_FILE
		DoEvents
	Loop
	
	Close
	MsgBox "done!"
	
End Sub

'strURL:ダウンロード元URL(ファイル名のみ)
'strFNAME:格納先フルパス+ファイル名
Function download(strURL As String, strFNAME As String) As Variant
	Dim base_url As String
	base_url = "http://~~~~~~/~~~~~/" & strURL
	download = URLDownloadToFile(0, base_url, strFNAME, 0, 0)

End Function