Riguardando il tuo codice:

sposta prima del primo While


codice:
Set recElenco = New ADODB.Recordset
recElenco.Open "anagrafica", cnDB, adOpenDynamic, adLockBatchOptimistic
Ma questo gia te l'avevo detto e dopo la chiusura dell'ultimo LOOP (o alla fine della routine) chiudi recElenco.

Non penso che ti risolve il problema, ma il codice risulterà più logico e pulito.