将Excel表格转换为XML时出错

你好,我想将一个大型的Excel工作表转换为特定文件夹中的xml文件。 为此,我已经阅读了这个问题( 将电子表格的行转换为单独的XML文件 )。 我尝试应用它并将其调整为适合excel格式:

在这里输入图像说明

调整代码后,它看起来像这样:

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 

你能帮我吗?

根据Ambi的评论,纠正和工作的VBA脚本是:

 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