web-dev-qa-db-ja.com

VBAを使用してファイルをダウンロードするには(Internet Explorerなし)

ExcelのVBAを使用してWebサイトからCSVファイルをダウンロードする必要があります。サーバーは、調査サービスからのデータであるため、私も認証する必要がありました。

このためにVBAで制御されたInternet Explorerを使用した多くの例を見つけました。ただし、ほとんどが遅いソリューションであり、ほとんどは複雑でした。

Update:しばらくして、Microsoft.XMLHTTPオブジェクトを使用して気の利いたソリューションを見つけましたエクセル。将来の参考のために、以下のソリューションを共有することを考えました。

33

このソリューションは、このWebサイトに基づいています: http://social.msdn.Microsoft.com/Forums/en-US/bd0ee306-7bb5-4ce4-8341-edd9475f84ad/Excel-2007-use-vba-to- download-save-csv-from-url

既存のファイルを上書きし、ログイン資格情報を渡すようにわずかに変更されています。

Sub DownloadFile()

Dim myURL As String
myURL = "https://YourWebSite.com/?your_query_parameters"

Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False, "username", "password"
WinHttpReq.send

If WinHttpReq.Status = 200 Then
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write WinHttpReq.responseBody
    oStream.SaveToFile "C:\file.csv", 2 ' 1 = no overwrite, 2 = overwrite
    oStream.Close
End If

End Sub
52
Declare PtrSafe 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 Example()
    DownloadFile$ = "someFile.ext" 'here the name with extension
    URL$ = "http://some.web.address/" & DownloadFile 'Here is the web address
    LocalFilename$ = "C:\Some\Path" & DownloadFile !OR! CurrentProject.Path & "\" & DownloadFile 'here the drive and download directory
    MsgBox "Download Status : " & URLDownloadToFile(0, URL, LocalFilename, 0, 0) = 0
End Sub

ソース

URLにユーザー名とアドレスを指定してFTPからダウンロードするときに、上記を見つけました。ユーザーは情報を提供してから呼び出しを行います。

これは、組織にactive FTP.exeをブロックするKaspersky AVがありますが、Web接続はないため、役に立ちました。 ftp.exeを使用して社内で開発することはできませんでしたが、これがソリューションでした。これが他の情報探しに役立つことを願っています!

11
Cole Busby