Como no sé ni los nombres ni los valores de tus campos, te pongo cómo sería el código "en general", y tu deberás cambiar por los nombres de tu tabla lo que está en negrita y por los nombres de los cuadros de texto de tu formulario lo que está subrayado.
Supuse que campo1 es tipo texto, campo2 es Fecha/Hora y campo3 número entero
Private Sub Campo1_AfterUpdate()
'Declaramos las variables
Dim valor1 As String
Dim valor2 As Date
Dim valor3 As Integer
Dim rst As Recordset
'Definimos la estructura de la consulta de datos agrupados de los 3 campos
Const miSQL As String = "SELECT INSCRIPTOS.[Campo1], INSCRIPTOS.[Campo2], INSCRIPTOS.[Campo3] " _
& "FROM INSCRIPTOS GROUP BY INSCRIPTOS.[Campo1], INSCRIPTOS.[Campo2], INSCRIPTOS.[Campo3]"
'Si alguno de los 2 campos están vacíos no hacemos nada
If IsNull(Me.Campo1) Or IsNull(Me.Campo2) Or IsNull(Me.Campo3) Then Exit Sub
'Asignamos los valores
valor1 = Me.Campo1.Value
valor2 = Me.Campo2.Value
valor3 = Me.Campo3.Value
'Creamos el recordset sobre la consulta de datos agrupados
Set rst = CurrentDb.OpenRecordset(miSQL, dbOpenDynaset)
'Si no hay registros, salimos
If rst.RecordCount = 0 Then Exit Sub
'Recorremos los registros, comparando los 3 valores
rst.MoveFirst
Do Until rst.EOF
If rst("Campo1").Value = valor1 And rst("Campo2").Value = valor2 And rst("Campo3").Value = valor3 Then
MsgBox "Si continuas se creará un registro repetido", vbCritical, "AVISO"
Exit Do
End If
Loop
End Sub
Private Sub Campo2_AfterUpdate()
Call Campo1_AfterUpdate
End Sub
Private Sub Campo3_AfterUpdate()
Call Campo1_AfterUpdate
End Sub
Las dos líneas que están en cursiva son donde tienes que poner el mensaje y/o acciones que quieres tomar:
Si quieres borrar los valores introducidos, usa Me.Nombredelcampo.Value="" y sitúa el foco en uno de ellos, com Me.Nombredelcampo.SetFocus
Cualquier cosa me comentas.