使用VBA提取HTML表格数据运行异常求助 附测试代码
问题原因分析
- 选择器用法错误:
getElementsByTagName()方法仅支持传入HTML原生标签名(如table、div),你传入的race-center-entry-list race-center-lineup是目标元素的class属性值,用该方法无法匹配到对应元素,是代码报错的直接原因。 - 动态内容未加载:该站点的赛事表格属于JavaScript动态渲染内容,直接通过XMLHTTP请求拿到的初始HTML中不存在实际表格数据,
htmlFile对象不会执行页面JS,因此就算选择器正确也无法读取到目标数据。
修正后代码
Option Explicit Sub FetchNascarRaceData() Dim ie As Object Dim targetTable As Object Dim oRow As Object, oCell As Object Dim data As Variant Dim x As Long, y As Long ' 创建IE对象加载页面 Set ie = CreateObject("InternetExplorer.Application") ie.Visible = False ' 设为True可显示IE窗口方便调试 ' 加载目标页面 With ie .navigate "https://www.nascar.com/results/racecenter/2021/nascar-cup-series/cook-out-southern-500" ' 等待页面完全加载 Do Until .readyState = 4 And Not .Busy DoEvents Loop ' 额外等待1秒确保JS渲染完成,可根据网络情况调整时长 Application.Wait Now + TimeValue("00:00:01") End With ' 用class选择器定位目标表格 Set targetTable = ie.document.querySelector(".race-center-entry-list.race-center-lineup table") ' 读取表格数据 If Not targetTable Is Nothing Then x = 1: y = 1 ReDim data(1 To targetTable.Rows.Length, 1 To targetTable.Rows(1).Cells.Length) For Each oRow In targetTable.Rows For Each oCell In oRow.Cells data(x, y) = oCell.innerText y = y + 1 Next oCell y = 1 x = x + 1 Next oRow ' 输出到工作表 Sheets(1).Cells(1, 1).Resize(UBound(data), UBound(data, 2)).Value = data Else MsgBox "未找到目标表格,请检查页面加载状态" End If ' 清理资源 ie.Quit Set ie = Nothing Set targetTable = Nothing End Sub
注意事项
- 运行前请确保Excel宏安全设置允许运行ActiveX控件
- 若多次出现未找到表格的提示,可适当延长代码中的等待时长
内容的提问来源于stack exchange,提问作者Kyle Hansen
相关产品推荐
相关产品推荐

