读取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__
相关产品推荐
相关产品推荐

