How do I download a file using VBA (without Internet Explorer) How do I download a file using VBA (without Internet Explorer) vba vba

How do I download a file using VBA (without Internet Explorer)


This solution is based from this website:http://social.msdn.microsoft.com/Forums/en-US/bd0ee306-7bb5-4ce4-8341-edd9475f84ad/excel-2007-use-vba-to-download-save-csv-from-url

It is slightly modified to overwrite existing file and to pass along login credentials.

Sub DownloadFile()Dim myURL As StringmyURL = "https://YourWebSite.com/?your_query_parameters"Dim WinHttpReq As ObjectSet WinHttpReq = CreateObject("Microsoft.XMLHTTP")WinHttpReq.Open "GET", myURL, False, "username", "password"WinHttpReq.sendIf 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.CloseEnd IfEnd Sub


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 LongSub 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) = 0End Sub

Source

I found the above when looking for downloading from FTP with username and address in URL. Users supply information and then make the calls.

This was helpful because our organization has Kaspersky AV which blocks active FTP.exe, but not web connections. We were unable to develop in house with ftp.exe and this was our solution. Hope this helps other looking for info!


A modified version of above to make it more dynamic.

Public Function DownloadFileB(ByVal URL As String, ByVal DownloadPath As String, ByRef Username As String, ByRef Password, Optional Overwrite As Boolean = True) As Boolean    On Error GoTo Failed    Dim WinHttpReq          As Object: Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")    WinHttpReq.Open "GET", URL, False, Username, Password    WinHttpReq.send    If WinHttpReq.Status = 200 Then        Dim oStream         As Object: Set oStream = CreateObject("ADODB.Stream")        oStream.Open        oStream.Type = 1        oStream.Write WinHttpReq.responseBody        oStream.SaveToFile DownloadPath, Abs(CInt(Overwrite)) + 1        oStream.Close        DownloadFileB = Len(Dir(DownloadPath)) > 0        Exit Function    End IfFailed:    DownloadFileB = FalseEnd Function