You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用VBA从HTML提取价格?Excel VBA新手遇运行时错误91求助

解决Excel VBA提取HTML价格时的运行时错误'91'

嘿,作为VBA新手碰到这个问题太正常了!你遇到的运行时错误'91',核心原因是代码里尝试引用一个还没被正确初始化的对象——要么是你要找的HTML元素没找到,要么是变量类型匹配错了。咱们一步步拆解问题,再给你修正后的代码:

问题出在哪?

  1. 变量类型不匹配:你把htmlprice定义成了MSHTML.IHTMLElement,但最后赋值的是innerText(这是字符串类型),相当于把文本塞给了元素对象,逻辑完全不对。
  2. 元素查找无容错getElementsByClassName("txcpa-itemDetails").Item(1)直接硬取索引1的元素,但如果这个类名的元素不存在,或者集合里只有1个元素(HTML集合默认从0开始索引),就会直接报错。
  3. 页面等待不严谨:单纯用readyState <> READYSTATE_COMPLETE等待页面加载,有时候页面的DOM元素还没完全渲染出来,导致你去查找元素时它还不存在。

修正后的代码

Option Explicit

Sub test()
    Dim ie As New SHDocVw.InternetExplorer
    Dim htmldoc As MSHTML.HTMLDocument
    Dim htmlprices As MSHTML.IHTMLElementCollection
    Dim htmlprice As String ' 改成字符串类型,因为要存文本内容
    
    ie.Visible = True
    ie.Navigate "http://www.txsmartbuy.com/product/10377318"
    
    ' 改进页面等待逻辑,确保DOM完全加载完成
    Do While ie.readyState <> READYSTATE_COMPLETE Or ie.Busy
        DoEvents ' 让程序响应其他事件,避免假死
    Loop
    
    Set htmldoc = ie.Document
    
    ' 先检查目标元素集合是否存在
    Set htmlprices = htmldoc.getElementsByClassName("txcpa-itemDetails")
    If htmlprices.Count > 0 Then
        ' 注意:HTML集合索引从0开始,要第二个元素用Item(1),第一个用Item(0)
        htmlprice = htmlprices.Item(1).innerText
        MsgBox "提取到的内容:" & htmlprice
    Else
        MsgBox "未找到目标元素!"
    End If
    
    ' 记得关闭IE,避免后台残留进程
    ie.Quit
    Set ie = Nothing
End Sub

额外提示

  • 如果你不确定目标元素的索引,可以先打印htmlprices.Count看看集合里有多少个元素,再决定用哪个索引值。
  • 要是页面是JS动态渲染内容,上面的代码还是找不到元素,可能需要再加一段等待时间,或者用htmldoc.querySelector更精准地定位价格对应的子元素。

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

火山引擎 最新活动