将Excel工作表的行转换为单独的XML文件时出现运行时错误

将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 = _

我不熟悉VBA,并且在excel上使用VBA,并编写宏以导出每行的xml文件(请参见打印屏幕中的示例)

不幸的是,我得到以下错误

运行时错误“2147024891(80070005)”: 系统错误:-2147024891

当我点击“调试”按钮时,它跳转到代码行
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电脑出了问题。然后我将尝试使用您的命令行进行调试。