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

Excel VBA已定义number变量 运行时为何仍报Error 91错误?

问题原因

Error 91 全称是「对象变量或 With 块变量未设置」,你碰到的报错和已经声明的number变量没有任何关系,报错触发在取值逻辑的前半段:
你调用html.getElementsByClassName("arial_14 redFont")时,没有找到符合该类名的元素,返回的是空的DOM集合,此时你直接调用.Item(0)读取空集合的第一个元素,就等于操作未初始化的对象,触发91错误。
常见的触发场景有两个:

  • 目标站点有反爬机制,XMLHTTP直接请求返回的页面结构和浏览器正常访问的结构不一致,返回的页面里根本没有你要找的arial_14 redFont类名元素
  • 页面结构更新,目标元素的类名已经发生了变更
修复方案
  1. 先加非空判断逻辑,避免直接操作空对象报错
  2. 可以先打印请求返回的完整页面文本,查找你要的数值对应的正确类名,再替换代码里的类名字符串
修改后的参考代码
Sub Get_Housing_Starts_From_Investing()

Dim request As Object
Dim response As String
Dim html As New HTMLDocument
Dim website As String
Dim number As Variant
Dim elementCol As IHTMLElementCollection ' 新增元素集合变量

' 引用配置保持不变:Microsoft Office 16.0 Object Library, Microsoft HTML Object Library, Microsoft XML, v6.0等
website = "https://www.investing.com/economic-calendar/housing-starts-151"

Set request = CreateObject("Msxml2.ServerXMLHTTP.6.0")
request.Open "GET", website, False
request.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
' 额外加UA头模拟浏览器请求,降低被反爬拦截的概率
request.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
request.send

response = StrConv(request.responseBody, vbUnicode)
html.body.innerHTML = response

' 先获取元素集合,再判断是否非空
Set elementCol = html.getElementsByClassName("arial_14 redFont") ' 后续找到正确类名替换这里即可
If elementCol.Length > 0 Then
    number = elementCol.Item(0).innerText
Else
    number = "未找到对应元素,请检查类名或请求返回的页面内容"
    ' 调试时可以取消下面这行注释,输出完整页面内容查找正确的元素标识
    ' Debug.Print response
End If

MsgBox number

End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:54:04