Мне нужно загрузить CSV файл с веб-сайта с помощью VBA в Excel. Сервер также должен был аутентифицировать меня, поскольку это были данные из службы опроса.
Я нашел много примеров, используя Internet Explorer, управляемый VBA. Однако это были в основном медленные растворы, и большинство из них также были запутаны.
Update: Через некоторое время я нашел отличное решение с использованием объекта Microsoft.XMLHTTP в Excel. Я решил поделиться решением ниже для справок в будущем.
Это решение основано на этом веб-сайте: 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
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
Я нашел это при поиске загрузки с FTP с именем пользователя и адресом в URL-адресе. Пользователи предоставляют информацию, а затем выполняют вызовы.
Это было полезно, потому что в нашей организации есть Kaspersky AV, который блокирует active
FTP.exe, но не веб-соединения. Мы не смогли развиваться в доме с ftp.exe, и это было нашим решением. Надеюсь, это поможет другим, кто ищет информацию!