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

读取XML文件获取TemplatePath值时遇运行时错误'91'求助

解决VBA读取XML节点时的运行时错误'91'

错误原因分析

运行时错误'91'本质是尝试访问未初始化的对象,你的代码存在三个核心问题:

  • 错误使用Set赋值字符串变量:prova是存储文本的变量,Text返回字符串类型,不需要用Set,直接赋值即可
  • 未校验XML文件加载状态:如果文件路径错误、文件不存在或格式无效,Load操作会失败,后续节点查找必然报错
  • 未判断目标节点是否存在:如果SelectNodes未找到匹配节点,item(0)会返回Nothing,此时访问其Text属性就会触发错误91

修正后的代码

Sub testxml()
    Dim oXMLFile As Object
    Dim templateNodes As Object
    Dim prova As String
    
    ' 创建XML对象并配置同步加载
    Set oXMLFile = CreateObject("Microsoft.XMLDOM")
    oXMLFile.async = False ' 确保文件加载完成后再执行后续逻辑
    
    ' 检查XML文件是否加载成功
    If Not oXMLFile.Load("C:\Users\Config.xml") Then
        Debug.Print "XML加载失败:" & oXMLFile.parseError.reason
        Exit Sub
    End If
    
    ' 获取目标节点集合
    Set templateNodes = oXMLFile.SelectNodes("//FilePath/TemplatePath")
    
    ' 确认节点存在后读取文本
    If templateNodes.Length > 0 Then
        prova = templateNodes.Item(0).Text
        ' 清理节点文本中的引号和多余空格(匹配你的XML示例格式)
        prova = Trim(Replace(prova, """", ""))
        Debug.Print prova
    Else
        Debug.Print "未找到TemplatePath节点"
    End If
End Sub

关键修复点说明

  • 移除Set关键字:字符串变量直接赋值,无需使用对象赋值的Set
  • 启用同步加载:设置async = False,避免文件未加载完成就执行节点查找
  • 增加加载校验:通过Load的返回值判断加载状态,失败时输出具体错误原因
  • 节点存在判断:用templateNodes.Length > 0确认找到节点后,再访问Text属性
  • 清理节点文本:针对你的XML示例中节点值带引号和空格的情况,用Trim和Replace去除多余字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:50:43