VBA для загрузки изображения из интернет-источника - PullRequest
0 голосов
/ 15 января 2019

Я хочу загрузить изображение из Интернета и попытался использовать API URLDownloadToFile следующим образом.

#If VBA7 Then
    Private Declare 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

    Private Sub TestDownload()

        Dim Source As String, Target As String
        Dim Ret As Long

        Source = "//cdnparap40.paragonrels.com/ParagonImages/Property/P4/JONESBORO/10077581/0/120/90/" & _
                 "f645b5257c6ae2f13147ec57c315f9f4/1/acd2b86d15f1087ed3462f2ba4ebb733/10077581.JPG"
        Target = "H:\Temp\FileName.jpg"
        Ret = URLDownloadToFile(0, Source, Ffn, 0, 0)
    End Sub

Целевой каталог существует, но код не дает результата (Ret = 0). Однако я не знаю причину, поскольку в коде нет ошибок.

Интернет-адрес правильный. Я могу просматривать изображение и его открытое для публики. Однако я не уверен, что загрузка разрешена.

Я не знаю, нужна ли конкретная ссылка на Urlmon.dll. Я попытался загрузить его, но VBA (Excel 2010) отказался: «не могу добавить ссылку на указанную библиотеку).

VBA7 = Правда на моей машине. Я изменил 3 Long объявления на LongPtr, но я не знаю, что это требуется (для всех трех). До того, как я попробовал тот же код с длинными объявлениями без лучшего результата.

И последнее, что не менее важно, я не уверен, что URLDownloadToFileA - это API, используемый для этой цели с этой конкретной структурой URL. Возможно, есть еще более простое решение.

Любое руководство приветствуется, решение было бы великолепным. Спасибо.

1 Ответ

0 голосов
/ 15 января 2019

Если вы вводите URL-адрес изображения без протокола в браузере, браузер выбирает протокол по умолчанию (обычно http). Но, похоже, это не относится к URLDownloadToFile -функции.

Добавление ведущего http: к URL помогло мне

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