将Excel工作表的行转换为单独的XML文件时出现运行时错误
我不熟悉VBA,并且在excel上使用VBA,并编写宏以导出每行的xml文件(请参见打印屏幕中的示例) 不幸的是,我得到以下错误 运行时错误“2147024891(80070005)”: 系统错误:-2147024891 当我点击“调试”按钮时,它跳转到代码行将Excel工作表的行转换为单独的XML文件时出现运行时错误,excel,xml,vba,Excel,Xml,Vba,我不熟悉VBA,并且在excel上使用VBA,并编写宏以导出每行的xml文件(请参见打印屏幕中的示例) 不幸的是,我得到以下错误 运行时错误“2147024891(80070005)”: 系统错误:-2147024891 当我点击“调试”按钮时,它跳转到代码行 doc.Save sFile 我使用以下代码读取excel工作表(Microsoft excel for Mac 16.49版)并创建xml文件: Sub CustomerOutToXML() sTemplateXML = _
doc.Save sFile
我使用以下代码读取excel工作表(Microsoft excel for Mac 16.49版)并创建xml文件:
Sub CustomerOutToXML()
sTemplateXML = _
"<?xml version='1.0'?>" + vbNewLine + _
"<ENVELOPE>" + vbNewLine + _
"<TRANSACTION>" + vbNewLine + _
"<TYPE>" + vbNewLine + "</TYPE>" + vbNewLine + _
"</TRANSACTION>" + vbNewLine + _
"<CONTENT>" + vbNewLine + vbNewLine + _
"<DATE>" + vbNewLine + "</DATE>" + vbNewLine + _
"<SSCC>" + vbNewLine + "</SSCC>" + vbNewLine + _
"<ORDER>" + vbNewLine + "</ORDER>" + vbNewLine + _
"</CONTENT>" + vbNewLine + _
"</ENVELOPE>"
Set doc = CreateObject("MSXML2.DOMDocument")
doc.async = False
doc.validateOnParse = False
doc.resolveExternals = False
With ActiveWorkbook.Worksheets(1)
lLastRow = .UsedRange.Rows.Count
For lRow = 2 To 7
sFile = "/Users/xxx/Documents/" & .Cells(lRow, 1).Value & ".xml"
Dim sDATE As String
Dim sSSCC As String 'Not Long
Dim sORDER As String
sDATE = CStr(.Cells(lRow, 2).Value)
sSSCC = .Cells(lRow, 3).Text ' <<< Not .Value
sORDER = CStr(.Cells(lRow, 4).Value)
sTransactionType = ActiveSheet.Name
doc.LoadXML sTemplateXML
doc.getElementsByTagName("DATE")(0).appendChild doc.createTextNode(sDATE)
doc.getElementsByTagName("TYPE")(0).appendChild doc.createTextNode(sTransactionType)
doc.getElementsByTagName("SSCC")(0).appendChild doc.createTextNode(sSSCC)
doc.getElementsByTagName("ORDER")(0).appendChild doc.createTextNode(sORDER)
doc.Save sFile
Next
End With
End Sub
Sub-CustomerOutToXML()
sTemplateXML=_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+_
“”+vbNewLine+_
""
Set doc=CreateObject(“MSXML2.DOMDocument”)
doc.async=False
doc.validateOnParse=False
doc.resolveExternals=False
使用Active工作簿。工作表(1)
lLastRow=.UsedRange.Rows.Count
对于lRow=2到7
sFile=“/Users/xxx/Documents/”和.Cells(lRow,1.Value和.xml”
将sDATE设置为字符串
将sSSCC变暗为字符串“不长”
像绳子一样模糊
sDATE=CStr(.Cells(lRow,2).Value)
SSCSC= =细胞(LROW,3)。text’p>您的问题是不可重复的,考虑一些提示可以帮助您诊断或解决您的问题:
在模块的最顶端使用选项Explicit
(子或函数的外部)以确保所有对象都已正确定义。相关地,将所有Dim
对象放在子例程或函数的顶部,以提高可读性
将正确的错误处理与错误转到时的合并…
以捕获运行时异常,并在取消设置有错误或无错误的对象后适当退出子程序
避免使用ActiveWorkbook
和ActiveSheet
,如果打开了许多工作簿,这可能会影响工作流。而是使用实际分配的对象或此工作簿
对象。请参阅这篇规范的Excel帖子(第二个答案讨论了Active*
方法)
尝试使用外部库(如MSXML)的早期绑定版本,它可以公开有用的错误属性并在VBA编辑器中启用Intellisense。目前,您对CreateObject
使用后期绑定。如果需要在多个用户之间进行后期绑定以实现可移植性,那么请忽略
Dim doc作为MSXML2.DOMDocument
Set doc=New MSXML2.DOMDocument
将与
块一起使用时,请遵循其所有属性。事实上,您可以避免使用ActiveSheet
:
sTransactionType=.Name
代码适用于我(在windows上),建议您使用debug.print sFile
检查sFile
是否是有效的文件名/路径,以及/Users/xxx/Documents/
是否可写入,感谢您的帮助和检查。现在我知道至少是我的Mac电脑出了问题。然后我将尝试使用您的命令行进行调试。