URLDownloadToFile генерирует ошибку компиляции: суб или функция не определена - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь загрузить изображения с URL-адресов в папку.Я получил следующий код из успешного ответа на этот вопрос .

Sub DownloadLinks()
    Dim ws As Worksheet
    Dim LastRow As Long, i As Long
    Dim strPath As String, strURL As String
    Dim c As Range

    Set ws = Sheets("Sheet1")

    LastRow = ws.Range("B" & Rows.Count).End(xlUp).Row

    For i = 2 To LastRow

        Set c = ws.Range("BP" & i)
        If c.Hyperlinks.Count>0 Then
            strPath = FolderName & c.Value & ".jpg"
            strURL = c.Hyperlinks(1).Address

            Ret = URLDownloadToFile(0, strURL, strPath, 0, 0)

            ws.Range("CA" & i).Value = IIf(Ret = 0, _
                                    "File successfully downloaded", _
                                    "Unable to download the file")
        Else
            ws.Range("CA" & i).Value = "No hyperlink!"
        End If
    Next i

End Sub

Когда я запускаю вышеупомянутый макрос, я получаю «Ошибка компиляции: Sub или Function Not Defined» со ссылкой наURLDownloadToFile.В других местах я видел URLDownloadToFile, определенный с этим кодом, который становится красным, как только я добавляю его в макрос.

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

Добавление этого слова в начало моего макроса приводит к синтаксической ошибке в первой строке.

Нужно ли загружать специальный патч или библиотеку для запуска URLDownloadToFile?Я использую Windows 10, 64-битную версию.Или что-то не так с вышеуказанным макросом?Я правильно не определяю URLDownloadToFile?

1 Ответ

1 голос
/ 20 июня 2019

Попробуйте это

#If VBA7 And Win64 Then
    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
#Else
    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
#End If

Sub DownloadLinks()
Dim ws As Worksheet
Dim LastRow As Long, i As Long
Dim FolderName as String, strPath As String, strURL As String


    Set ws = Sheets("Sheet1")
    FolderName = "C:\Users\me\Desktop\"
    LastRow = ws.Range("B" & Rows.Count).End(xlUp).Row

    For i = 2 To LastRow

        strURL = ws.Range("C" & i).Value
        If len(strURL) Then
            strPath = FolderName & ws.Range("B" & i).Value & ".jpg"
            Ret = URLDownloadToFile(0, strURL, strPath, 0, 0)

            ws.Range("D" & i).Value = IIf(Ret = 0, _
                                    "File successfully downloaded", _
                                    "Unable to download the file")
        Else
            ws.Range("D" & i).Value = "No URL!"
        End If
    Next i

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...