将行导出为独立XML文件时遇Permission 70权限错误求助
解决VBA导出XML时的Permission 70权限错误
可能的问题根源
- 路径格式不完整:
sFolder单元格中的值可能仅为文件夹路径,未包含具体的XML文件名,导致DOMDocument尝试将内容保存到文件夹而非文件,触发权限错误。 - 文件被占用:目标路径下的同名XML文件可能已被其他程序(如记事本、Excel)打开,处于锁定状态无法写入。
- 路径解析异常:路径包含空格或特殊字符时,未做转义处理导致程序无法正确识别目标位置。
- DOMDocument版本兼容:使用的
MSXML2.DOMDocument基础版本可能存在权限验证的兼容性问题。
针对性解决方案
1. 补全完整文件路径
如果表格第5列仅存储文件夹路径,需在代码中拼接文件名(比如用第一列的Name值作为文件名):
' 替换原有的sFolder直接保存逻辑 sFullPath = sFolder & "\" & sname & ".xml" doc.Save sFullPath
确保最终路径是类似C:\Users\XXX\Desktop\张三.xml的完整文件路径,而非仅文件夹地址。
2. 关闭被占用的目标文件
运行代码前,手动关闭目标路径下所有已打开的XML文件,解除文件锁定状态。
3. 处理含特殊字符的路径
若路径包含空格或特殊字符,用双引号包裹路径避免解析错误:
doc.Save Chr(34) & sFullPath & Chr(34)
4. 更换DOMDocument版本
改用更高版本的DOMDocument提升兼容性:
Set doc = CreateObject("MSXML2.DOMDocument.6.0")
5. 添加错误捕获定位问题
在代码中加入错误处理,精准定位出错的行和路径:
Sub Export() On Error GoTo ErrorHandler sTemplateXML = _ "<data>" + vbNewLine + _ " <Name/>" + vbNewLine + _ " <AXCustNum/>" + vbNewLine + _ " <CustomerName/>" + vbNewLine + _ " <Title/>" + vbNewLine + _ " <Folder/>" + vbNewLine + _ "</data>" + vbNewLine Set doc = CreateObject("MSXML2.DOMDocument.6.0") doc.async = False doc.validateOnParse = False doc.resolveExternals = False With Sheets("SAL Checked File Names 1.9") lLastRow = .UsedRange.Rows.Count For lRow = 2 To lLastRow sname = .Cells(lRow, 1).Value saxcustnum = .Cells(lRow, 2).Value scustomername = .Cells(lRow, 3).Value sTitle = .Cells(lRow, 4).Value sFolder = .Cells(lRow, 5).Value sFullPath = sFolder & "\" & sname & ".xml" doc.LoadXML sTemplateXML doc.getElementsByTagName("Name")(0).appendChild doc.createTextNode(sname) doc.getElementsByTagName("AXCustNum")(0).appendChild doc.createTextNode(saxcustnum) doc.getElementsByTagName("CustomerName")(0).appendChild doc.createTextNode(scustomername) doc.getElementsByTagName("Title")(0).appendChild doc.createTextNode(sTitle) doc.getElementsByTagName("Folder")(0).appendChild doc.createTextNode(sFolder) doc.Save sFullPath Next End With Exit Sub ErrorHandler: MsgBox "错误代码:" & Err.Number & vbCrLf & "错误描述:" & Err.Description & vbCrLf & "出错行:" & lRow & vbCrLf & "目标路径:" & sFullPath, vbCritical Set doc = Nothing End Sub
验证步骤
- 手动在目标路径创建测试XML文件,确认该位置具备读写权限。
- 检查表格第5列的路径格式,确保每个条目都指向有效文件夹。
- 运行修改后的代码,根据错误提示进一步排查具体问题。
内容的提问来源于stack exchange,提问作者Sallie Francis
相关产品推荐
相关产品推荐

