如何用Microsoft Edge统计网页表格数并在Excel导入倒数第二个表格
问题分析
原代码的核心问题在于用Shell.Application操作Edge的方式不可靠:
Shell.Application.Windows返回的窗口集合无法精准对应Edge的网页文档,容易导致Doc对象获取失败- URL存在重复的
https://(microsoft-edge:https://https://...),会引发页面加载异常 - 等待逻辑仅判断窗口数量,未等页面DOM完全加载就调用
getElementsByTagName,必然出错
解决方案1:VBA + InternetExplorer.Application(稳定可控)
替换原浏览器控制方式,改用专门的IE自动化对象,确保能正确获取网页DOM:
Sub ImportSecondLastTable() Dim ie As Object Dim doc As Object Dim tables As Object Dim targetTable As Object Dim ws As Worksheet Dim url As String ' 修正后的目标URL url = "https://www.fidal.it/atleta/Elia-Ghezzi/fbORkpOicWo%3D" ' 初始化IE对象 Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ' 设为False可后台运行 ie.Navigate url ' 等待页面完全加载 Do While ie.Busy Or ie.ReadyState <> 4 DoEvents Loop ' 获取文档对象与所有表格 Set doc = ie.Document Set tables = doc.getElementsByTagName("table") ' 检查表格数量并定位目标 If tables.Length >= 2 Then Set targetTable = tables(tables.Length - 2) ' 创建新工作表并导入数据 Set ws = ThisWorkbook.Sheets.Add ws.Name = "TargetTable" targetTable.Copy ws.Range("A1").PasteSpecial xlPasteAll MsgBox "倒数第二个表格已导入!" Else MsgBox "页面表格数量不足2个,无法定位目标。" End If ' 关闭IE(可选) ie.Quit Set ie = Nothing End Sub
关键说明:
- 用
InternetExplorer.Application直接控制浏览器,能稳定获取网页DOM - 等待逻辑判断
ie.Busy和ReadyState=4(完全加载状态),确保页面加载完成后再操作 - 通过
tables.Length - 2直接定位倒数第二个表格(DOM元素索引从0开始)
解决方案2:Excel Power Query(无需VBA,简便高效)
如果不想写代码,Power Query是更直观的选择,步骤如下:
- 打开Excel,点击数据选项卡 → 自网站
- 输入目标URL,点击确定
- 在导航器窗口选择加载到 → 仅创建连接,点击确定
- 点击数据选项卡 → 连接 → 选中刚创建的连接 → 属性 → 定义选项卡
- 在命令文本中替换为以下M代码,指定加载倒数第二个表格:
let Source = Web.Page(Web.Contents("https://www.fidal.it/atleta/Elia-Ghezzi/fbORkpOicWo%3D")), Tables = Source{0}[Data], TableCount = List.Count(Tables), TargetTable = Tables{TableCount - 2} in TargetTable - 点击确定,再通过数据→现有连接打开该连接,即可导入目标表格
优势:
- 无需编写复杂VBA,可视化操作为主
- 支持一键刷新数据,后续更新无需重复操作
内容的提问来源于stack exchange,提问作者Sergio
相关产品推荐
相关产品推荐

