2017-12-21 6 views
0

VBAを初めて使用し、ExcelでVBAを使用して、行ごとにxmlファイルをエクスポートするマクロを作成します(印刷画面の例を参照)。すべてのフィールドは、「SSCC」フィールドを除く正しいフォーマットを表します。 example of the excel format ExcelファイルのVBA ExcelはLongに変換してオーバーフローを与えます

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シートを読み込み、XMLファイルを作成するための次のコードを使用オーバーフローエラー

を返します。

+4

最大値は長く保持することができますが、 '代わりに文字列を使用し2,147,483,647'です。 –

+0

これをStringに変換すると、この値が返されます。 1,0001640001E + 19ではなく10001640001000000000 –

+1

@ Jacob H:間違ったVisual Basic Longデータ型がリンクされています。 Microsoft Office VBAでは、Longは4バイトのみ-2,147,483,648〜2,147,483,647です。 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/data-type-summaryを参照してください。 –

答えて

2

StringとsSSCCを宣言する必要があります。そして、代わりに自分のラインで.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 
関連する問題