VBA - URLDownloadToFile - в загруженном файле отсутствуют данные
Используя URLDownloadToFile в VBA, я пытаюсь загрузить файл. Проблема в том, что загружается пустой файл. Есть идеи, почему данные отсутствуют?
Option Explicit
Private Declare 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
Dim Ret As Long
Sub Sample()
Dim strURL As String
Dim strPath As String
strURL = "https://abc.abcabc.com/cmif-ku/reports/2012/byOwningEntity/Excel/myfilename.xls"
strPath = "C:\Temp\myfilename.xls"
Ret = URLDownloadToFile(0, strURL, strPath, 0, 0)
If Ret = 0 Then
MsgBox "File successfully downloaded"
Else
MsgBox "Unable to download the file"
End If
End Sub
3 ответа
У меня похожая проблема. Я использую следующий код, но получил сообщение "переполнение":
Sub downloadFile()
Dim targetFile As String, targetUrl As String, returnVal As Integer
target = "http://www.ishares.com/us/products/239454/ishares-20-year-treasury-bond-etf/1395165510757.ajax?fileType=xls&fileName=iShares-20-Year-Treasury-Bond-ETF"
strSavePath = "C:\testdownload.txt"
returnVal = URLDownloadToFile(0, target, strSavePath, 0, 0)
If returnVal = 0 Then
Debug.Print "Download ok!"
Else
Debug.Print "Error"
End If
End Sub
Вы получили переполнение, потому что вы использовали целое число для сбора длинного значения. Urldownloadtofile возвращает длинное значение. Если загрузка прошла успешно, вы получили бы "0". Тогда твой код сработал бы.
Надеюсь, это может быть полезно другим. Проверьте следующее:
- Вы используете MS Office 64-битную или 32-битную версию.
- Декларация для 64 бит
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As LongPtr, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As LongPtr, _
ByVal lpfnCB As LongPtr _
) As Long
- В то время как в 32 Офисе это
Private Declare 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
- Результирующая переменная должна иметь тип «Long».
- Путь к целевому URL-адресу должен быть правильным, и там должен присутствовать целевой файл или данные.