VBA从Internet来源下载图像

时间:2019-01-15 10:26:15

标签: vba download

我想从网上下载图像,并尝试使用URLDownloadToFile API,如下所示。

#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)。但是,我不知道原因,因为代码没有错误。

Internet地址正确。我可以查看图片并向公众开放。但是,我不确定是否允许下载。

我不知道是否需要对Urlmon.dll的特定引用。我尝试加载它,但VBA(Excel 2010)拒绝,“无法添加对指定库的引用。”

VBA7 =在我的机器上为True。我将3个Long声明更改为LongPtr,但我不知道这是必需的(对于所有三个)。在我使用Long声明尝试相同的代码之前,没有更好的结果。

最后,同样重要的是,我不确定URLDownloadToFileA是用于此特定URL结构的API。也许有一个更简单的解决方案。

任何指导都是值得欢迎的,解决方案将是很棒的。谢谢。

1 个答案:

答案 0 :(得分:1)

如果在浏览器中输入不带协议的图像URL,浏览器将选择默认协议(通常为http)。但是URLDownloadToFile函数似乎并非如此。

在网址中添加前导http:对我来说很成功