【问题标题】:Web download image and save to folder网页下载图片并保存到文件夹
【发布时间】:2020-07-05 15:52:07
【问题描述】:

我正在尝试使用 VBA-Web 库 (https://github.com/VBA-tools/VBA-Web) 下载图像并将其保存到我的计算机。

此代码运行良好,但我想检查其完成工作的正确方法。 VBA 不是我的主要经验。

Sub Run()

    Dim client As New WebClient
    With client
        .BaseUrl = "http://chart.apis.google.com/chart?cht=qr&chs=160x160&chld=L|0&chl=hello"
        .EnableAutoProxy = True
    End With

    Dim request As New WebRequest
    With request
        .Method = WebMethod.HttpGet
        .AddHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
    End With

    Dim Response As WebResponse
    Set Response = client.Execute(request)

    ProcessResponse Response

End Sub

Sub ProcessResponse(Response As WebResponse)

    Dim oStream As Object

    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write Response.Body
    oStream.SaveToFile Environ("USERPROFILE") & "\Desktop\image_test.png", 2
    oStream.Close

End Sub

我使用过各种其他方法进行下载,包括 XMLHTTP 和 URLDownloadToFile,但由于网络问题,我需要 VBA-Web 提供的代理处理...

【问题讨论】:

  • 嗨,如果它有效,但您正在寻找批评,请考虑code review site。 SO适用于特定的编程问题。从表面上看,代码看起来很好。
  • 啊,谢谢。我很抱歉。

标签: excel vba


【解决方案1】:

不需要使用自定义库,试试这个

Public 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

Public Sub GURoL(url As String, FileName As String)
Dim lngRetVal As Long
    lngRetVal = URLDownloadToFile(0, url, FileName, 0, 0)
    If lngRetVal <> 0 Then
    MsgBox "GURol godo: Can't download from " & url & " to " & FileName
    End If
End Sub

Sub Download_Procedure()
Call GURoL("http://i.msdn.microsoft.com/ms348103.LOGO_WINDOWS(en-us,MSDN.10).png", _
           "c:\Temp\plik.png") '<change your dest. path
End Sub

【讨论】:

  • 谢谢。但正如问题中所述,由于内部网络问题,这对我不起作用。
  • 代码下的底线“我已经使用了各种其他方法来下载并工作,包括 XMLHTTP 和 URLDownloadToFile,但由于网络问题,我需要 VBA-Web 提供的代理处理......”问题是我们有一个内部系统,在访问外部网络时需要自动登录。
  • 感谢您的帮助。
【解决方案2】:

注意:如果您收到错误消息“编译错误:必须更新此项目中的代码才能在 64 位系统上使用。请查看并更新 Declare 语句,然后用 PtrSafe 属性标记它们” . Image of this prompted error massage

尝试将PtrSafe 关键字添加到Declare 语句可能会有所帮助。

比如把上面的代码sn-p改成

Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias _

这也适用于 Excel 2016 64 位。

参考:https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/ptrsafe-keyword

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    相关资源
    最近更新 更多