如何用VBA提取网页嵌套div内表格信息?解决类型不匹配错误
解决VBA错误13:类型不匹配并提取div内表格信息
首先,你遇到的错误13:类型不匹配大概率是因为点击查询按钮后,页面还没完成加载就尝试获取PPosition元素,或者变量声明不够严谨导致的。咱们一步步来修正代码,同时实现提取列车号、始发状态等信息的需求:
第一步:完善变量声明与页面等待逻辑
原代码里Doc没有指定类型,而且点击按钮后缺少等待页面加载的步骤,这会导致元素还未渲染就被调用,触发类型不匹配错误。建议添加明确的类型处理(后期绑定无需额外引用库),同时在点击后增加等待循环。
第二步:提取表格数据的核心逻辑
找到PPosition div后,它里面的表格是我们的目标。我们需要遍历表格的每一行和每一列,通过关键字筛选出列车号、始发状态等关键信息(根据示例集装箱号TCNU4171692的查询结果,这些信息在表格的特定行中)。
修正后的完整代码
Sub GetContainerStatus() Dim IE As Object Dim Doc As Object ' 后期绑定,无需引用HTML库;若提前引用可改为HTMLDocument Dim containerNo As String Dim targetDiv As Object Dim table As Object Dim row As Object Dim cell As Object ' 初始化IE对象 Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True ' 导航到目标页面 IE.navigate "http://www.concorindia.com/containerquery.aspx" ' 等待页面初始加载完成 Do While IE.Busy Or IE.readyState <> 4 Application.Wait DateAdd("s", 1, Now) Loop Set Doc = IE.document containerNo = ThisWorkbook.Sheets("Status").Range("B3").Value ' 输入集装箱号并点击查询 Doc.getElementById("contno").Value = containerNo Doc.getElementById("CONTButton1").Click ' 等待查询结果加载完成(关键!点击后页面会刷新,必须等渲染完成) Do While IE.Busy Or IE.readyState <> 4 Application.Wait DateAdd("s", 1, Now) Loop ' 获取目标div,增加错误处理避免找不到元素时报错 On Error Resume Next Set targetDiv = Doc.getElementById("PPosition") On Error GoTo 0 If Not targetDiv Is Nothing Then ' 获取div内的第一个表格(假设目标数据在这个表格里) Set table = targetDiv.getElementsByTagName("table")(0) ' 遍历表格行,提取关键信息 For Each row In table.Rows For Each cell In row.Cells ' 根据关键字定位列车号 If InStr(cell.innerText, "Train No.") > 0 Then ThisWorkbook.Sheets("Status").Range("C3").Value = row.Cells(1).innerText ' 根据关键字定位始发状态 ElseIf InStr(cell.innerText, "Origin Status") > 0 Then ThisWorkbook.Sheets("Status").Range("D3").Value = row.Cells(1).innerText End If Next cell Next row Else MsgBox "未找到查询结果,请检查集装箱号是否正确!" End If ' 清理对象,释放资源 IE.Quit Set IE = Nothing Set Doc = Nothing Set targetDiv = Nothing Set table = Nothing End Sub
关键说明
- 页面等待:点击查询按钮后必须再次等待页面加载,因为按钮触发了新的请求,页面会重新渲染内容,这是原代码最容易忽略的核心点。
- 健壮性处理:用
On Error Resume Next防止找不到PPositiondiv时直接报错,让代码更稳定。 - 灵活调整:如果表格结构有变化,你可以修改关键字判断逻辑或单元格索引,适配不同的信息位置。
内容的提问来源于stack exchange,提问作者user11669760
相关产品推荐
相关产品推荐

