ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 639|回复: 1

[求助] 用VBA自動下載 網頁提供的檔案下載

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-12 20:47 | 显示全部楼层 |阅读模式
1.目的: 用VBA自動下載 網頁提供的檔案下載

2.網址: https://www.taifex.com.tw/cht/3/futPrevious30DaysSalesData

3.網頁程式片段:
  <input name="button7" type="button" class="btn_orange" id="button7" value="下載">

4.問題: 請教如何用 VBA 模擬啟動下載動作, 順利下載檔案

5.方法: Excel-VBA操作文件的四大方法    https://www.cnblogs.com/janicemvidal/p/8963386.html
  試過 上列3種方法
  方法1 Workbooks.Open() or Workbooks.OpenXML() 無法開啟遠端網址檔案
  方法2 Open xFile For Binary As #1   也無法開啟遠端網址檔案
  方法3 Set fso = CreateObject("Scripting.FileSystemObject", server)  在指定遠程Server出錯
  另用網頁爬蟲方法 GET/POST 強制擷取 網頁內容
  雖可硬抓下 Daily_2020_01_10.zip
  但是檔案長度不對, 內容開頭有包含ZIP壓縮檔識別碼,但內容含亂碼,無法解壓縮

6感謝 先進 指點!

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-2 22:18 | 显示全部楼层
已解決!

用網頁爬蟲方法 GET/POST 強制擷取 網頁內容
但是要取用 X.responseBody的內容,配合 CreateObject("ADODB.Stream") 開檔存檔
即可 順利抓下檔案

程式片段如下
    Set X = CreateObject("Microsoft.XMLHTTP")              '設定網頁擷取 物件指標
    gSleep 0.2                                                              '延遲幾秒鐘 比較不會被 網頁流量限制
    X.Open "GET", u0, False                                           '設定網頁擷取 以  GET 方式 設定連接網址
    On Error Resume Next                                              '設定 未知錯誤處理
    X.send                                                                     '發送網頁資料擷取要求
    If Err.Number <> 0 Then                                          '不明錯誤處理
        Err.Clear                                                              '清除 系統錯誤標誌
        On Error GoTo 0                                                     '取消目前程序裏的錯誤處理
        GoTo L_99
    End If
    If (X.Status <> 200) Or (X.ReadyState <> 4) Then GoTo L_99        '擷取失敗 (網頁無法讀取)
    Set Y = CreateObject("ADODB.Stream")
    Y.Open
    Y.Type = 1
    Y.Write X.responseBody
    Y.SaveToFile f1, 2 ' 1 = no overwrite, 2 = overwrite
    Y.Close
    Set X = Nothing
    Set Y = Nothing

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-16 17:52 , Processed in 0.033810 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表