Riguardando il tuo codice:
sposta prima del primo While
Ma questo gia te l'avevo detto e dopo la chiusura dell'ultimo LOOP (o alla fine della routine) chiudi recElenco.codice:Set recElenco = New ADODB.Recordset recElenco.Open "anagrafica", cnDB, adOpenDynamic, adLockBatchOptimistic
Non penso che ti risolve il problema, ma il codice risulterà più logico e pulito.