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

如何使用VBA提取网页表格中td标签内的数据?现有代码调试求助

问题描述

我在编写网页数据抓取代码时遇到问题:代码前半段可以正常运行,但负责提取站点表格数据的后半段一直写不对。问题卡在<td>标签上,我需要拿到<td>标签里的全部或部分内容,试了很多次都没成功,能不能提供可以正常提取表格数据的代码?

我已经写好的代码如下:

Sub provera_TR_klijenta()

    '需要在引用里勾选: _
    Microsoft Internet Controls _
    Microsoft HTML Object Library
    
    Dim objIE As InternetExplorer '代表IE浏览器的对象变量
    Dim aEle As HTMLLinkElement '<a>链接元素的对象变量
    
    Dim ieDoc As MSHTML.HTMLDocument
    Dim iframeDoc As MSHTML.HTMLDocument
    
    '初始化IE浏览器实例
    Set objIE = New InternetExplorer
    
    '设置IE可见,设置为False可后台运行
    objIE.Visible = True
    objIE.Width = 1000
    objIE.Height = 800
    
    '打开目标页面
    objIE.navigate "https://nbs.rs/en/drugi-nivo-navigacije/servisi/jedinstveni-registar-racuna/index.html"
    '等待页面加载完成
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
    
    Set ieDoc = objIE.document
    Set iframeDoc = ieDoc.frames(0).document
    
    '填入查询参数并提交
    iframeDoc.getElementsByName("matbr")(1).Value = "21122017"
    iframeDoc.getElementsByName("Submit")(0).Click
    
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
    
    '*** 后续提取表格数据的代码不知道怎么写 ***

End Sub
解决代码

在你标注不知道如何编写的位置之后,追加以下代码即可实现表格内容提取,默认将数据输出到当前激活的工作表中:

' 等待iframe内的结果表格加载完成,避免提前取值报错
Dim tbl As MSHTML.HTMLTable
On Error Resume Next
Do
    DoEvents
    Set tbl = iframeDoc.getElementsByTagName("table")(0)
Loop While tbl Is Nothing
On Error GoTo 0

' 配置输出工作表
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
Dim rowNum As Long, colNum As Long
rowNum = 1 ' 数据写入的起始行

' 遍历表格所有行
Dim tr As MSHTML.HTMLTableRow
Dim td As MSHTML.HTMLTableCell
For Each tr In tbl.Rows
    colNum = 1 ' 每行写入的起始列
    ' 遍历当前行的所有单元格
    For Each td In tr.Cells
        ' innerText为单元格纯文本内容,需要带格式的源码可替换为td.innerHTML
        ws.Cells(rowNum, colNum).Value = td.innerText
        colNum = colNum + 1
    Next td
    rowNum = rowNum + 1
Next tr

' 操作完成后释放资源
objIE.Quit
Set objIE = Nothing
Set iframeDoc = Nothing
Set ieDoc = Nothing
Set ws = Nothing
注意事项
  • 如果目标页面存在多个表格,调整getElementsByTagName("table")(索引)的索引值即可,索引从0开始计数
  • 如果只需要提取指定列的内容,遍历单元格时增加列号判断逻辑即可
  • 若网络环境较差,可在点击提交按钮后额外增加1-2秒的固定等待,减少循环等待的资源占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:09:03