Como faço para baixar um arquivo usando o VBA (Sem Internet Explorer)

Eu preciso baixar um arquivo CSV de um site usando o VBA no Excel. O servidor também precisava me autenticar, pois eram dados de um serviço de pesquisa.

Eu encontrei muitos exemplos usando o Internet Explorer controlado com o VBA para isso. No entanto, foi principalmente soluções lentas e a maioria também foi complicada.

Atualização: Depois de um tempo eu encontrei uma solução bacana usando o object Microsoft.XMLHTTP no Excel. Eu pensei em compartilhar a solução abaixo para referência futura.

Esta solução é baseada neste site: http://social.msdn.microsoft.com/Forums/en-US/bd0ee306-7bb5-4ce4-8341-edd9475f84ad/excel-2007-use-vba-to-download-save- csv-from-url

Ele é ligeiramente modificado para replace o arquivo existente e passar as credenciais de login.

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 myURL = WinHttpReq.responseBody 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 
 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 

Fonte

Eu encontrei o acima ao procurar por download de FTP com nome de usuário e endereço na URL. Os usuários fornecem informações e, em seguida, fazem as chamadas.

Isso foi útil porque nossa organização tem o Kaspersky AV, que bloqueia active http://FTP.exe active , mas não as conexões da web. Não foi possível desenvolver em casa com http://ftp.exe e esta foi a nossa solução. Espero que isso ajude o outro à procura de informações!