I strongly suggest to use transactions in this type of operation. If any error occurs, all actions are rolled back and you'll save yourself a lot of time and trouble...
I assumed your 'archive' table has the same structure and field names as the 'working' table.
Sub ArchiveRecords()
dim rsToAppendFrom, rsToAppendTo, fld, TransStarted
On Error GoTo ErrHandler
If MsgBox("Do you want to transfer the records?",vbYesNo)=vbYes Then
Set rsToAppendFrom=CurrentdDb.OpenRecordset("SQL Statement to select the records you want to transfer"

Set rsToAppendTo=CurrentDb.OpenRecordset("Select * From TableName Where 0=1"

DbEngine.BeginTrans
TransStarted = True
Do Until rsToAppendFrom.EOF
rsToAppendTo.AddNew
For Each fld In rsToAppendTo.Fields
rsToAppendTo(fld.Name) = rsToAppendFrom(fld.Name)
Next
rsToAppendTo.Update
rsToAppendFrom.MoveNext
Loop
If MsgBox("Do you want to delete the records from the old table?",vbYesNo)=vbYes Then
With rsToAppendFrom
.MoveFirst
Do Until .EOF
.Delete
.MoveNext
Loop
End With
End If
End If
If TransStarted Then Db.Engine.CommitTrans: TransStarted=False
CloseRecordsets:
rsToAppendFrom.Close
Set rsToAppendFrom = Nothing
rsToAppendTo.Close
set rsToAppendTo = Nothing
Exit Sub
ErrHandler:
If TransStarted Then Db.Engine.Rollback: TransStarted=False
MsgBox "Error: " & Err.Number & ". All records restored"
Resume CloseRecordsets
End Sub
Hope this helps,
dan