It would have been nice to have more details: the names of the other fields, but try this.
All 3 criteria MUST match to delete the record. If only 0, 1 or 2 match then the record IS NOT deleted
Code:
'Dim dbs As DAO.Database '<<-- not used
Dim strSQL As String
Dim strTable As String
Dim strField1 As String
Dim strField2 As String
Dim strField3 As String
Dim varLastVal1 As Variant
Dim varLastVal2 As Variant
Dim varLastVal3 As Variant
strTable = "tblImportExec"
strField1 = "NUM"
strField2 = "2ndCriteria" '<-- change to your field name
strField3 = "3rdCriteria" '<-- change to your field name
'Set dbs = CurrentDb '<<-- not used
'Recordset must be full table but sorted by the fields we're checking
strSQL = "SELECT * FROM [" & strTable & "] ORDER BY [" & strField1 & "], [" & strField2 & "], [" & strField3 & "]"
Debug.Print strSQL
With CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
varLastVal1 = Null
varLastVal2 = Null
varLastVal3 = Null
'For each record, check varLastVal1, varLastVal2, varLastVal3 against previous values in strField1, strField2, strField3
'If same then this is a duplicate so can be removed
Do Until .EOF
If .Fields(strField1) = varLastVal1 And .Fields(strField2) = varLastVal2 And .Fields(strField3) = varLastVal3 Then
Call .Delete
Else
varLastVal1 = .Fields(strField1)
varLastVal2 = .Fields(strField2)
varLastVal3 = .Fields(strField3)
End If
Call .MoveNext
Loop
'Ending the 'With' releases the Recordset
End With
(**air code**)