You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA网页抓取表格数据时如何剔除多余的日历日期内容

解决方案
  • 核心问题原因:当前代码是从整个页面文档中搜索所有<table>标签,页面中的日期选择日历组件也是基于table标签渲染的,所以会被一同抓取输出。你已经定位到了仅包裹目标汇率表的id="data"的div容器,只要调整table的搜索范围即可解决。
  • 具体修改方法:将原代码中
Set HTMLTABLES = HTMLDOC.getElementsByTagName("table")

替换为

Set HTMLTABLES = HTMLDIV.getElementsByTagName("table")

调整后仅会搜索data容器内部的表格,自动排除容器外的日历等无关表格内容。

  • 修改后完整可运行代码(新增IE资源释放逻辑,避免残留后台进程):
Sub gettingTablesfromCBR()
Dim IE As New SHDocVw.InternetExplorer
Dim HTMLDOC As MSHTML.HTMLDocument
Dim HTMLTABLES As MSHTML.IHTMLElementCollection
Dim HTMLTABLE As MSHTML.IHTMLElement
Dim HTMLDIV As MSHTML.IHTMLElement
Dim TableSection As MSHTML.IHTMLElement
Dim TableRow As MSHTML.IHTMLElement
Dim TableCell As MSHTML.IHTMLElement

IE.Visible = True
IE.navigate "https://www.cbr.ru/eng/currency_base/dynamics/?UniDbQuery.Posted=True&UniDbQuery.so=1&UniDbQuery.mode=1&UniDbQuery.date_req1=&UniDbQuery.date_req2=&UniDbQuery.VAL_NM_RQ=R01100&UniDbQuery.From=07.08.2021&UniDbQuery.To=05.11.2021"

    Do While IE.ReadyState <> READYSTATE_COMPLETE
    Loop
   
Set HTMLDOC = IE.Document
Set HTMLDIV = HTMLDOC.getElementById("data")
' 仅在data容器内搜索表格,排除外部无关日历表格
Set HTMLTABLES = HTMLDIV.getElementsByTagName("table")
Dim RowText As String
For Each HTMLTABLE In HTMLTABLES
    
    For Each TableSection In HTMLTABLE.Children

            For Each TableRow In TableSection.Children
                RowText = ""
                For Each TableCell In TableRow.Children
                    RowText = RowText & vbTab & TableCell.innerText
                Next TableCell
                Debug.Print , , RowText
            Next TableRow
    
    Next TableSection
    
Next HTMLTABLE

' 关闭IE释放系统资源
IE.Quit
Set IE = Nothing
End Sub

内容的提问来源于stack exchange,提问作者xlmaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:36:06