Подтвердить что ты не робот

Как загрузить файл с помощью VBA (без Internet Explorer)

Мне нужно загрузить CSV файл с веб-сайта с помощью VBA в Excel. Сервер также должен был аутентифицировать меня, поскольку это были данные из службы опроса.

Я нашел много примеров, используя Internet Explorer, управляемый VBA. Однако это были в основном медленные растворы, и большинство из них также были запутаны.

Update: Через некоторое время я нашел отличное решение с использованием объекта Microsoft.XMLHTTP в Excel. Я решил поделиться решением ниже для справок в будущем.

4b9b3361

Ответ 1

Это решение основано на этом веб-сайте: http://social.msdn.microsoft.com/Forums/en-US/bd0ee306-7bb5-4ce4-8341-edd9475f84ad/excel-2007-use-vba-to-download-save- CSV-из-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

Ответ 2

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, и это было нашим решением. Надеюсь, это поможет другим, кто ищет информацию!