Come faccio a scaricare un file usando VBA (senza Internet Explorer)

Devo scaricare un file CSV da un sito Web utilizzando VBA in Excel. Il server aveva anche bisogno di autenticarmi poiché si trattava di dati di un servizio di sondaggi.

Ho trovato molti esempi usando Internet Explorer controllato con VBA per questo. Tuttavia, era per lo più soluzioni lente e la maggior parte erano anche contorte.

Aggiornamento: dopo un po ‘ho trovato una soluzione elegante usando l’object Microsoft.XMLHTTP in Excel. Ho pensato di condividere la soluzione qui sotto per riferimento futuro.

Questa soluzione è basata su questo sito Web: http://social.msdn.microsoft.com/Forums/en-US/bd0ee306-7bb5-4ce4-8341-edd9475f84ad/excel-2007-use-vba-to-download-save- csv-da-url

È leggermente modificato per sovrascrivere il file esistente e per passare le credenziali di accesso.

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

Ho trovato quanto sopra quando cerco di scaricare da FTP con username e indirizzo in URL. Gli utenti forniscono informazioni e quindi effettuano le chiamate.

Ciò è stato utile perché la nostra organizzazione ha Kaspersky AV che blocca http://FTP.exe active , ma non le connessioni Web. Non siamo riusciti a sviluppare in casa con http://ftp.exe e questa era la nostra soluzione. Spero che questo aiuti altri alla ricerca di informazioni!