VBA Excel通过转换为Long来提供过低

问题描述 投票:1回答:1

我是VBA的新手,在excel上使用VBA并编写一个宏来导出每行的xml文件(请参阅打印屏幕中的示例)。除“SSCC”字段外,所有字段均表示正确的格式。这会返回溢出错误

我使用以下代码来读取Excel工作表并创建一个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(9)
  lLastRow = .UsedRange.Rows.Count

  For lRow = 2 To 10
   sFile = "T:\xxx\xxx\CustomerOutXML\CustomerOut" & .Cells(lRow, 1).Value & ".xml"
   Dim sDATE As String
   Dim sSSCC As Long
   Dim sORDER As String

   sDATE = CStr(.Cells(lRow, 2).Value)
   sSSCC = CLng(.Cells(lRow, 3).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

EXcel fileexample of the excel format示例您能否帮我解决这个问题

xml excel vba excel-vba
1个回答
2
投票

您需要将sSSCC声明为String。然后,而不是使用.Value与你的行:sSSCC = .Cells(lRow, 3).Value,使用.Text代替(并删除CLng

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(9)
  lLastRow = .UsedRange.Rows.Count

  For lRow = 2 To 10
   sFile = "T:\xxx\xxx\CustomerOutXML\CustomerOut" & .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
© www.soinside.com 2019 - 2024. All rights reserved.