Parto da una cosa che non hai chiesto ma che nel codice è inguardabile
Gulp ha scritto:
Do Until rs3.EOF
rs3.Delete
rs3.MoveNext
Loop
Do Until rs2.EOF
rs2.Delete
rs2.MoveNext
Loop
Noooo, per svuotare una tabella/query fai la più classica delle query di cancellazione dal metodo Execute di un oggetto Database
Dim currDb as DAO.Database
Set currDb = CurrentDb()
With currDb
.Execute "DELETE FROM TMP-ImportaXML_CodiceArticolo", dbFailOnError
.Execute "DELETE FROM TMP-ImportaXML_DettaglioLinee", dbFailOnError
End With
meglio ancora se in una transazione che, già che ci sei, dovrà comprendere anche le azioni di Update sui recordset.
Gulp ha scritto:
... mi piacerebbe ciclare con "For Each" per ogni sottonodo di CodiceArticolo
e non ci riesci? (domanda retorica, evidentemente non ci riesci altrimenti non lo chiederesti)
Già sai fare il ciclo su altri nodi e su questo ti pianti?
Set CodiceTipo1 = lineaDettaglio.childNodes(1).childNodes(0)
Set CodiceValore1 = lineaDettaglio.childNodes(1).childNodes(1)
If Not lineaDettaglio.childNodes(1).childNodes(1) Is Nothing Then
With rs3
.AddNew
.Fields("NumeroLinea") = Trim(NumeroLinea.text)
.Fields("CodiceTipo") = Trim(CodiceTipo1.text)
.Fields("CodiceValore") = Trim(CodiceValore1.text)
.Update
End With
End If
Ti rendi conto di come hai scritto il resto del codice? Tutto un copia/incolla in cui cambia solo il numero alla fine delle variabili: CodiceTipo da 1 a N. Campanello d'allarme: o puoi scrivere una funzione ad hoc o puoi fare un ciclo o... c'è comunque qualcosa che ti permette di fare le cose giuste nel modo giusto.
NumeroLinea è un oggetto del DOM di cui poi tu sfrutti la proprietà .text per scriverla nel campo NumeroLinea. Siccome non cambia tra le varie ripetizioni del codice, crei una variabile apposita e le assegni il valore e quando è ora di scrivere nel campo usi il valore "definitivo" già ottenuto con la variabile, senza dover ogni volta sottoporre a Trim al proprietà .text di NumeroLinea (ipotizzo si tratti di una stringa, se è numerico modifica il datatype della variabile)
Dim strNumeroLinea as String
strNumeroLinea = Trim(NumeroLinea.text)
Andando più nel dettaglio, vedo che fai una If, qui
Gulp ha scritto:
Set CodiceTipo1 = lineaDettaglio.childNodes(1).childNodes(0)
Set CodiceValore1 = lineaDettaglio.childNodes(1).childNodes(1)
If Not lineaDettaglio.childNodes(1).childNodes(1) Is Nothing Then
Può accadere che CodiceTipo sia valorizzato ma non lo sia CodiceValore?
Il resto dei suggerimenti quando hai chiarito questo.
Potresti agevolare il tutto pubblicando un piccolissimo estratto del file, nella parte che si va ad analizzare con quel codice che tu hai ripetuto 4 volte? Così capisco meglio e non rischio di prendere fischi per fiaschi e fare anche brutta figura.
(metti anche quello tra tag code, un file xml si legge meglio, a mio avviso, se scritto in quel modo)