Il tuo problema sta quì
>Set T2 = db.OpenRecordset("SELECT * FROM Tab2 WHERE [NumeroOrdine]=" & T1.Fields("NumeroOrdine").Value, dbOpenDynaset)
>If T2.Fields("NumeroOrdine").Value <> T1.Fields("NumeroOrdine").Value Then
Quando in T1 non hai nessun record corrispondente la tua query ( "SELECT * FROM ..... ) non restituisce nessun record
quindi non ha senso il confronto della riga successiva e ti va in errore.
Per risolvere ti basta usare il RecordCount e verificare che sia diverso da zero
_------------- ma io lo farei totalmente diversamente.
Fai una query fra le 2 tabelle per trovare i record non corrispondenti e poi questa query
la fai diventare direttamente recordset
( anche la query scritta naturalmente con VBA )
SELECT tab1.Id, tab1.NumeroOrdine FROM tab1 LEFT JOIN tab2 ON tab1.NumeroOrdine = tab2.NumeroOrdine WHERE (((tab2.NumeroOrdine) Is Null));
Facci sapere