Можно сделать процедуру, которая в цикле будет сравнивать изменившиеся значения полей. Типа такой
Sub sravnTabl(t1, t2, nameKeyField)
Dim s, fld As Field, tdf As TableDef, db As Database
Set db = CurrentDb
Set tdf = db.TableDefs(t1)
For Each fld In tdf.Fields
If fld.Name <> nameKeyField Then
s = s & vbCrLf & " select '" & fld.Name & "' as [Поле], " & t1 & "." _
& nameKeyField & ", cstr(" & t1 & ".[" & fld.Name & "]) as [ИсхТабл], cstr(" & t2 & ".[" & fld.Name _
& "]) as [ТекТабл] from " & t1 & " Inner join " & t2 & " on " _
& t1 & "." & nameKeyField & "=" & t2 & "." & nameKeyField _
& " where " & t1 & ".[" & fld.Name & "]<>" & t2 & ".[" & fld.Name & "]" _
& vbCrLf & " Union all"
End If
Next
s = Left(s, Len(s) - 9)
Debug.Print s
db.QueryDefs("qTemp").sql = s
DoCmd.OpenQuery ("qTemp")
End Sub
В параметрах процедуры t1 - имя архивная таблица, t2 - имя текущей. nameKeyField это имя ключевого поля.
Запрос "qTemp" это просто запрос, в который запихивается сгенерированный SQL-код