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