gpt4 book ai didi

excel - 将 Excelsheet 行转换为单独的 XML 文件时出现运行时错误

转载 作者:行者123 更新时间:2023-12-04 20:23:08 25 4
gpt4 key购买 nike

我是 VBA 新手,在 excel 上使用 VBA 并编写一个宏来每行导出一个 xml 文件(参见打印屏幕中的示例)。
不幸的是,我收到以下错误

Run-time error '2147024891 (80070005)':System error: -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
这是 excelsheet 的一个示例:
enter image description here
我会很高兴得到一些快速的帮助。提前致谢。

最佳答案

虽然您的问题不可重现,但请考虑一些可以帮助您诊断或解决问题的提示:

  • 使用Option Explicit在模块的最顶部(SubFunction 之外),以确保正确定义所有对象。相关地,将所有 Dim子程序或函数顶部的对象以提高可读性。
  • 将正确的错误处理与 On Error GoTo... 结合起来捕获运行时异常并在取消设置有或没有错误的对象后适本地退出子例程。
  • 避免使用 ActiveWorkbookActiveSheet如果您打开了许多工作簿,这可能会影响工作流程。而是使用实际分配的对象或 ThisWorkbook目的。请参阅此规范的 Excel 帖子,How to avoid using Select in Excel VBA (第二个答案讨论 Active* 方法)。
  • 尝试使用 MSXML 等外部库的早期绑定(bind)版本,它可以公开有用的错误属性并在 VBA 编辑器中启用 Intellisense。目前,您使用 CreateObject 的后期绑定(bind)。 .如果需要在许多用户之间进行后期绑定(bind)以实现可移植性,请忽略。
    Dim doc As MSXML2.DOMDocument

    Set doc = New MSXML2.DOMDocument
  • 使用 With 时 block ,遵循其所有属性。事实上,您可以避免使用 ActiveSheet :
    sTransactionType = .Name
  • 关于excel - 将 Excelsheet 行转换为单独的 XML 文件时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67592590/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com