2017-10-01 20 views
1

こんにちは大文字のExcelシートを特定のフォルダのxmlファイルに変換します。これを行うには、私は質問(Convert rows of spreadsheet to separate XML files)を読んだ。私はそれがExcel形式に収まるように、それを適用し、それをlitleを調整してみてください。ExcelシートをXMLに変換中にエラーが発生しました

enter image description here

コードを調整した後、それは次のようになります。

Sub xmlPerRow() 

sTemplateXML = _ 
     "<?xml version='1.0'?>" + vbNewLine + "<data>" + vbNewLine + "<Grai>" + vbNewLine + "</Grai>" + vbNewLine + _ 
     " <DayDateOut>" + vbNewLine + " </DayDateOut>" + vbNewLine + " <Filler>" + vbNewLine + " </Filler>" + vbNewLine + _ 
     " <FillerCountry>" + vbNewLine + " </FillerCountry>" + vbNewLine + " <Retailer>" + vbNewLine + " </Retailer>" + vbNewLine + _ 
     " <RetailerCountry>" + vbNewLine + " </RetailerCountry>" + vbNewLine + " <Days>" + vbNewLine + " </Days>" + vbNewLine + _ 
     " <DayBack>" + vbNewLine + " </DayBack>" + vbNewLine + " <DateIn>" + vbNewLine + " </DateIn>" + vbNewLine + _ 
     " <BrokenCode>" + vbNewLine + " </BrokenCode>" + vbNewLine + " <Broken>" + vbNewLine + " </Broken>" + vbNewLine + _ 
     " <TotalCycles>" + vbNewLine + " </TotalCycles>" + vbNewLine + "</data>" + vbNewLine 

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 lLastRow 
    sFile = .Cells(lRow, 1).Value & ".xml" 
    sGrai = .Cells(lRow, 1).Value 
    sDayDateOut = .Cells(lRow, 2).Value 
    sFiller = .Cells(lRow, 3).Value 
    sRetailer = .Cells(lRow, 4).Value 
    sRetailerCountry = .Cells(lRow, 5).Value 
    sDays = .Cells(lRow, 6).Value 
    sDayBack = .Cells(lRow, 7).Value 
    sDateIn = .Cells(lRow, 8).Value 
    sBrokenCode = .Cells(lRow, 9).Value 
    sBroken = .Cells(lRow, 10).Value 
    sTotalCycles = .Cells(lRow, 11).Value 

    doc.LoadXML sTemplateXML 
    doc.getElementsByTagName("Grai")(0).appendChild doc.createTextNode(sGrai) 
    doc.getElementsByTagName("DayDateOut")(0).appendChild doc.createTextNode(sDayDateOut) 
    doc.getElementsByTagName("Filler")(0).appendChild doc.createTextNode(sFiller) 
    doc.getElementsByTagName("RetailerCountry")(0).appendChild doc.createTextNode(sRetailerCountry) 
    doc.getElementsByTagName("Retailer")(0).appendChild doc.createTextNode(sRetailer) 
    doc.getElementsByTagName("Days")(0).appendChild doc.createTextNode(sDays) 
    doc.getElementsByTagName("DayBack")(0).appendChild doc.createTextNode(sDayBack) 
    doc.getElementsByTagName("DateIn")(0).appendChild doc.createTextNode(sDateIn) 
    doc.getElementsByTagName("BrokenCode")(0).appendChild doc.createTextNode(sBrokenCode) 
    doc.getElementsByTagName("Broken")(0).appendChild doc.createTextNode(sBroken) 
    doc.getElementsByTagName("TotalCycles")(0).appendChild doc.createTextNode(sTotalCycles) 
    doc.Save sFile 
    Next 

End With 
End Sub 

しかし、私は上のエラーを返しますこのライン:コメント付き

doc.getElementsByTagName("Grai")(0).appendChild doc.createTextNode(sGrai) 

Error code 91: Object variable or bock variable is not set 

私を助けてもらえますか?アンビのコメント修正と作業VBAスクリプトに基づいて

+1

使用 '&' 'sFile = .Cells(lRow、1).Value&" .xml "' –

+0

ありがとうRobin、取り替えられます。しかし、今私は別のエラーが表示されます(記事の更新を参照)。 –

+1

タグ名にスペースを入れることはできません。 「Day Date Out」と「Retailer country」などを参照してください。https://stackoverflow.com/questions/3480887/how-to-include-space-in-xml-tag-element-which-gets-transformed-by -xslt-into-exce。 –

答えて

0

は次のとおりです。例えば文字列を連結する

Sub xmlPerRow() 

sTemplateXML = _ 
     "<?xml version='1.0'?>" + vbNewLine + "<data>" + vbNewLine + "<Grai>" + vbNewLine + "</Grai>" + vbNewLine + _ 
     " <DayDateOut>" + vbNewLine + " </DayDateOut>" + vbNewLine + " <Filler>" + vbNewLine + " </Filler>" + vbNewLine + _ 
     " <FillerCountry>" + vbNewLine + " </FillerCountry>" + vbNewLine + " <Retailer>" + vbNewLine + " </Retailer>" + vbNewLine + _ 
     " <RetailerCountry>" + vbNewLine + " </RetailerCountry>" + vbNewLine + " <Days>" + vbNewLine + " </Days>" + vbNewLine + _ 
     " <DayBack>" + vbNewLine + " </DayBack>" + vbNewLine + " <DateIn>" + vbNewLine + " </DateIn>" + vbNewLine + _ 
     " <BrokenCode>" + vbNewLine + " </BrokenCode>" + vbNewLine + " <Broken>" + vbNewLine + " </Broken>" + vbNewLine + _ 
     " <TotalCycles>" + vbNewLine + " </TotalCycles>" + vbNewLine + "</data>" + vbNewLine 

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 lLastRow 
    sFile = "Grai_" & .Cells(lRow, 1).Value & ".xml" 
    Dim sGrai As String 
    sGrai = CStr(.Cells(lRow, 1).Value) 
    sDayDateOut = .Cells(lRow, 2).Value 
    sFiller = .Cells(lRow, 3).Value 
    sFillerCountry = .Cells(lRow, 4).Value 
    sRetailer = .Cells(lRow, 5).Value 
    sRetailerCountry = .Cells(lRow, 6).Value 
    sDays = .Cells(lRow, 7).Value 
    sDayBack = .Cells(lRow, 8).Value 
    sDateIn = .Cells(lRow, 9).Value 
    sBrokenCode = .Cells(lRow, 10).Value 
    sBroken = .Cells(lRow, 11).Value 
    sTotalCycles = .Cells(lRow, 12).Value 

    doc.LoadXML sTemplateXML 
    doc.getElementsByTagName("Grai")(0).appendChild doc.createTextNode(sGrai) 
    doc.getElementsByTagName("DayDateOut")(0).appendChild doc.createTextNode(sDayDateOut) 
    doc.getElementsByTagName("Filler")(0).appendChild doc.createTextNode(sFiller) 
    doc.getElementsByTagName("RetailerCountry")(0).appendChild doc.createTextNode(sRetailerCountry) 
    doc.getElementsByTagName("Retailer")(0).appendChild doc.createTextNode(sRetailer) 
    doc.getElementsByTagName("Days")(0).appendChild doc.createTextNode(sDays) 
    doc.getElementsByTagName("DayBack")(0).appendChild doc.createTextNode(sDayBack) 
    doc.getElementsByTagName("DateIn")(0).appendChild doc.createTextNode(sDateIn) 
    doc.getElementsByTagName("BrokenCode")(0).appendChild doc.createTextNode(sBrokenCode) 
    doc.getElementsByTagName("Broken")(0).appendChild doc.createTextNode(sBroken) 
    doc.getElementsByTagName("TotalCycles")(0).appendChild doc.createTextNode(sTotalCycles) 
    doc.Save sFile 
    Next 

End With 
End Sub 
関連する問題