Il codice che scrivi ha molti errori principalmente concettuali, ma devi inserirlo tra i TAG del codice.
Intanto se devi copiare/duplicare un Record identificabile con una PK come nel tuo caso [ID_PREV] mi chiedo perchè apri tutta la tabella per poi cercarlo e non apri un RS con WHERE condition che ha efficienza estremamente più alta, riduce drasticamente il traffico di dati....?
Parlo di questo:
Tabella.FindFirst "ID_PREV = " & strSearchPrev
Da fare così
Set Tabella1 = DBCorrente.OpenRecordset("SELECT * FROM Tabella WHERE ID_PREV = " & strSearchPrev VociPrev")
Controlli BOF ed EOF per verificare se il Dato è stato trovato, anche se mi chiedo che possibilità ci siano di non trovarlo, questo al posto del Nomatch...
Detto questo dal momento che la Tabella di Origine e Destinazione è la medesima... perchè apri 2 RS sulla stessa tabella, peraltro entrambi in R/W cosa che potrebbe creare non pochi problemi...?
Memorizza quei 2 Valori da recuperare o copiare, gli altri 2 sono recuperabili da fonti esterne... quindi sul RS aperto per la Ricerca fai un ADDNEW e sei a posto.
Altra cosa non comprensibile è il LOOP... quanti dati devi duplicare...? a mia comprensione... si tratta di SOLO 1... anche perchè altrimenti sarebbero sempre uguali... ma in ogni caso la Selezione dell'ID è unica perchè mai fare un LOOP...?
Insomma il tutto è decisamente poco logico.