Excel:为每行(电子表格中)创建一个.xml文件(使用VBA)

Excel:为每行(电子表格中)创建一个.xml文件(使用VBA),excel,vba,transform,Excel,Vba,Transform,我构建了一个代码,为每一行创建一个.xml文件,例如,下面的电子表格 以下代码可以正常工作,但有一种情况除外,ResetDate的值与多行相同 VBA代码(我不是专家) 子testXLStoXML() sTemplateXML=_ “”+vbNewLine+_ “”+vbNewLine+_ “”+vbNewLine+_ “”+vbNewLine+_ “”+vbNewLine+_ “”+vbNewLine+_ “”+vbNewLine+_ “”+vbNewLine+_ “”+vbNewLine+

我构建了一个代码,为每一行创建一个.xml文件,例如,下面的电子表格

以下代码可以正常工作,但有一种情况除外,ResetDate的值与多行相同

VBA代码(我不是专家)

子testXLStoXML()
sTemplateXML=_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine
Set doc=CreateObject(“MSXML2.DOMDocument”)
doc.async=False
doc.validateOnParse=False
doc.resolveExternals=False
使用Active工作簿。工作表(1)
lLastRow=.UsedRange.Rows.Count
对于lRow=2至lLastRow
sFile=格式(.Cells(lRow,1).值,“DD-MMM-YY”)
sBirthdate=格式(.Cells(lRow,2).值,“DD-MMM-YY”)
sAmount=格式(.Cells(lRow,3).值,“DD-MMM-YY”)
sRate=.Cells(lRow,4).Value
平方=.Cells(lRow,5).Value
sID=.Cells(lRow,6).Value
doc.LoadXML sTemplateXML
doc.getElementsByTagName(“ResetDate”)(0).appendChild doc.createTextNode(ResetDate)
doc.getElementsByTagName(“ValueDate”)(0).appendChild doc.createTextNode(ValueDate)
doc.getElementsByTagName(“到期日”)(0).appendChild doc.createTextNode(到期日)
doc.getElementsByTagName(“速率”)(0)。appendChild doc.createTextNode(sRate)
doc.getElementsByTagName(“数量”)(0).appendChild doc.createTextNode(sQuantity)
doc.getElementsByTagName(“ID”)(0).appendChild doc.createTextNode(sID)
保存文件
下一个
以
端接头

如您所见,我只得到一个日期文件作为输出:


有什么建议吗?提前感谢

删除
doc.Save sFile
并替换为以下代码:

尺寸x与长度相同
x=Application.CountIf(.Range(“A2:A”和lrow),.Cells(lrow,1))
如果x>1,则doc.Save sFile&“\ux”&x否则doc.Save sFile
因此,您的修订代码将是:

子testXLStoXML()
暗x等长
sTemplateXML=_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine+_
“”+vbNewLine
Set doc=CreateObject(“MSXML2.DOMDocument”)
doc.async=False
doc.validateOnParse=False
doc.resolveExternals=False
使用Active工作簿。工作表(1)
lLastRow=.UsedRange.Rows.Count
对于lRow=2至lLastRow
sFile=格式(.Cells(lRow,1).值,“DD-MMM-YY”)
sBirthdate=格式(.Cells(lRow,2).值,“DD-MMM-YY”)
sAmount=格式(.Cells(lRow,3).值,“DD-MMM-YY”)
sRate=.Cells(lRow,4).Value
平方=.Cells(lRow,5).Value
sID=.Cells(lRow,6).Value
doc.LoadXML sTemplateXML
doc.getElementsByTagName(“ResetDate”)(0).appendChild doc.createTextNode(ResetDate)
doc.getElementsByTagName(“ValueDate”)(0).appendChild doc.createTextNode(ValueDate)
doc.getElementsByTagName(“到期日”)(0).appendChild doc.createTextNode(到期日)
doc.getElementsByTagName(“速率”)(0)。appendChild doc.createTextNode(sRate)
doc.getElementsByTagName(“数量”)(0).appendChild doc.createTextNode(sQuantity)
doc.getElementsByTagName(“ID”)(0).appendChild doc.createTextNode(sID)
x=Application.CountIf(.Range(“A2:A”和lrow),.Cells(lrow,1))
如果x>1,则doc.Save sFile&“\ux”&x否则doc.Save sFile
下一条路
以
端接头

错误发生在哪一行?另外,由于您是在重置日期之前保存的,如果使用现有文件名保存,您不希望出现错误吗?您好,@AAA我没有看到任何错误,VBA运行时没有问题。我看不到任何像覆盖/替换现有文件这样的消息,根据您的问题,现在我的问题是:“我可以保存文件吗,而不是通过ResetDate?像文件1、文件2、文件3、…、文件n一样保存它们?”感谢您的消息。正如@AAA所提到的,您正在使用以下代码来确定文件名
sFile=Format(.Cells)(lRow,1).Value,“DD-MMM-YY”)
,它引用了第1列,其中包含您的` ResetDate1',因此两个文件将具有相同的名称:0)Hello@AAA抱歉回复太晚,昨天我没有时间查看它。它现在运行良好,已修复,感谢您的兴趣和时间。问候@洛伦佐卡斯塔尼奥,如果这对你有用,你应该。
Sub testXLStoXML()
 sTemplateXML = _
        "<?xml version='1.0'?>" + vbNewLine + _
        "<E>" + vbNewLine + _
        "   <ResetDate>" + vbNewLine + _
        "   </ResetDate>" + vbNewLine + _
        "   <ValueDate>" + vbNewLine + _
        "   </ValueDate>" + vbNewLine + _
        "   <MaturityD>" + vbNewLine + _
        "   </MaturityD>" + vbNewLine + _
        "   <Rate>" + vbNewLine + _
        "   </Rate>" + vbNewLine + _
        "   <Quantity>" + vbNewLine + _
        "   </Quantity>" + vbNewLine + _
        "   <ID>" + vbNewLine + _
        "   </ID>" + vbNewLine + _
        "</E>" + 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 = Format(.Cells(lRow, 1).Value, "DD-MMM-YY")
   sBirthdate = Format(.Cells(lRow, 2).Value, "DD-MMM-YY")
   sAmount = Format(.Cells(lRow, 3).Value, "DD-MMM-YY")
   sRate = .Cells(lRow, 4).Value
   sQuantity = .Cells(lRow, 5).Value
   sID = .Cells(lRow, 6).Value
   doc.LoadXML sTemplateXML
   doc.getElementsByTagName("ResetDate")(0).appendChild doc.createTextNode(ResetDate)
   doc.getElementsByTagName("ValueDate")(0).appendChild doc.createTextNode(ValueDate)
   doc.getElementsByTagName("MaturityD")(0).appendChild doc.createTextNode(MaturityD)
  doc.getElementsByTagName("Rate")(0).appendChild doc.createTextNode(sRate)
  doc.getElementsByTagName("Quantity")(0).appendChild doc.createTextNode(sQuantity)
  doc.getElementsByTagName("ID")(0).appendChild doc.createTextNode(sID)
   doc.Save sFile
  Next

 End With
End Sub