Olá pessoal podem me ajuda em uma situação
segue o código que estou utilizando
quando o xml tem todas as TAG ele puxa certinho.
porem quando algum xml tem uma TAG por exemplo "vDesc" ele puxa normal e o próximo xml não tive essa TAG ele repete o valor para todos os xml que nao tem a TAg
Option Explicit
Public Sub gerarelatorioicms()
On Error Resume Next
Dim arqs, arq
Dim NFe As New DOMDocument
Dim produto As IXMLDOMNode
Dim produtos As IXMLDOMNodeList
Dim dicRelatorio As New Dictionary
Dim dhEmi As Variant
Dim nNF As String, chNFe$, cProd$, xProd$, CFOP$, CSTICMS$, uf$, uff$
Dim vProd As Double, pICMS#, bcICMS#, vICMS#, vDesc#, vfrete#, vseguro#, voutros#, vipi#
arqs = Application.GetOpenFilename("arquivos xml (*.xml), *.xml", , "selecione os arquios xml", , True)
For Each arq In arqs
NFe.Load (arq)
nNF = NFe.SelectSingleNode("//nNF").Text
dhEmi = NFe.SelectSingleNode("//dhEmi").Text
chNFe = NFe.SelectSingleNode("//@Id").Text
uf = NFe.SelectSingleNode("//UF").Text
uff = NFe.getElementsByTagName("UF")(1).Text
'Debug.Print NFe.getElementsByTagName("UF")(1).Text
Set produtos = NFe.SelectNodes("//det")
For Each produto In produtos
cProd = produto.SelectSingleNode("prod/cProd").Text
xProd = produto.SelectSingleNode("prod/xProd").Text
vProd = FORMATARVALORES(produto.SelectSingleNode("prod/vProd").Text)
CFOP = produto.SelectSingleNode("prod/CFOP").Text
CSTICMS = produto.SelectSingleNode("imposto/ICMS//orig").Text & produto.SelectSingleNode("imposto/ICMS//CST").Text
pICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//pICMS").Text)
'SIMPLES NACIONAL
pICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//CSOSN").Text) = 0
vfrete = FORMATARVALORES(produto.SelectSingleNode("prod/vFrete").Text)
vDesc = FORMATARVALORES(produto.SelectSingleNode("prod/vDesc").Text)
vseguro = FORMATARVALORES(produto.SelectSingleNode("prod/vSeg").Text)
voutros = FORMATARVALORES(produto.SelectSingleNode("prod/vOutro").Text)
bcICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//vBC").Text)
'SIMPLES NACIONAL
bcICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//CSOSN").Text) = 0
vICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//vICMS").Text)
vICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//CSOSN").Text) = 0
vipi = FORMATARVALORES(produto.SelectSingleNode("imposto/IPI//vIPI").Text)
dicRelatorio(dicRelatorio.Count + 1) = Array(nNF, chNFe, dhEmi, cProd, xProd, vProd, CFOP, CSTICMS, pICMS, bcICMS, vICMS, uf, uff, vDesc, vfrete, vseguro, voutros, vipi)
Next produto
Next arq
With Application
Planilha1.Range("a3").Resize(dicRelatorio.Count, 18).Value = .Transpose(.Transpose(dicRelatorio.Items))
End With
End Sub
Public Function FORMATARVALORES(ByVal VALOR As String) As Double
FORMATARVALORES = Replace(VALOR, ".", ",")
End Function
Public Function FORMATARPERCENTUAIS(ByVal VALOR As String) As Double
FORMATARVALORES = Replace(VALOR, ".", ",") / 100
End Function
segue o código que estou utilizando
quando o xml tem todas as TAG ele puxa certinho.
porem quando algum xml tem uma TAG por exemplo "vDesc" ele puxa normal e o próximo xml não tive essa TAG ele repete o valor para todos os xml que nao tem a TAg
Option Explicit
Public Sub gerarelatorioicms()
On Error Resume Next
Dim arqs, arq
Dim NFe As New DOMDocument
Dim produto As IXMLDOMNode
Dim produtos As IXMLDOMNodeList
Dim dicRelatorio As New Dictionary
Dim dhEmi As Variant
Dim nNF As String, chNFe$, cProd$, xProd$, CFOP$, CSTICMS$, uf$, uff$
Dim vProd As Double, pICMS#, bcICMS#, vICMS#, vDesc#, vfrete#, vseguro#, voutros#, vipi#
arqs = Application.GetOpenFilename("arquivos xml (*.xml), *.xml", , "selecione os arquios xml", , True)
For Each arq In arqs
NFe.Load (arq)
nNF = NFe.SelectSingleNode("//nNF").Text
dhEmi = NFe.SelectSingleNode("//dhEmi").Text
chNFe = NFe.SelectSingleNode("//@Id").Text
uf = NFe.SelectSingleNode("//UF").Text
uff = NFe.getElementsByTagName("UF")(1).Text
'Debug.Print NFe.getElementsByTagName("UF")(1).Text
Set produtos = NFe.SelectNodes("//det")
For Each produto In produtos
cProd = produto.SelectSingleNode("prod/cProd").Text
xProd = produto.SelectSingleNode("prod/xProd").Text
vProd = FORMATARVALORES(produto.SelectSingleNode("prod/vProd").Text)
CFOP = produto.SelectSingleNode("prod/CFOP").Text
CSTICMS = produto.SelectSingleNode("imposto/ICMS//orig").Text & produto.SelectSingleNode("imposto/ICMS//CST").Text
pICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//pICMS").Text)
'SIMPLES NACIONAL
pICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//CSOSN").Text) = 0
vfrete = FORMATARVALORES(produto.SelectSingleNode("prod/vFrete").Text)
vDesc = FORMATARVALORES(produto.SelectSingleNode("prod/vDesc").Text)
vseguro = FORMATARVALORES(produto.SelectSingleNode("prod/vSeg").Text)
voutros = FORMATARVALORES(produto.SelectSingleNode("prod/vOutro").Text)
bcICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//vBC").Text)
'SIMPLES NACIONAL
bcICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//CSOSN").Text) = 0
vICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//vICMS").Text)
vICMS = FORMATARVALORES(produto.SelectSingleNode("imposto/ICMS//CSOSN").Text) = 0
vipi = FORMATARVALORES(produto.SelectSingleNode("imposto/IPI//vIPI").Text)
dicRelatorio(dicRelatorio.Count + 1) = Array(nNF, chNFe, dhEmi, cProd, xProd, vProd, CFOP, CSTICMS, pICMS, bcICMS, vICMS, uf, uff, vDesc, vfrete, vseguro, voutros, vipi)
Next produto
Next arq
With Application
Planilha1.Range("a3").Resize(dicRelatorio.Count, 18).Value = .Transpose(.Transpose(dicRelatorio.Items))
End With
End Sub
Public Function FORMATARVALORES(ByVal VALOR As String) As Double
FORMATARVALORES = Replace(VALOR, ".", ",")
End Function
Public Function FORMATARPERCENTUAIS(ByVal VALOR As String) As Double
FORMATARVALORES = Replace(VALOR, ".", ",") / 100
End Function