La verdad es que hay algo que no me cuadra en tu explicación, dado que el dices que el campo se llama sí, pero el código está asignado a un control llamado SIP.
Vayamos por partes:
Si introduces una regla de validación en el campo tienes dos elementos operando sobre el campo: uno, el propio Access, y dos, tu código VB. Eso provoca conflictos. Solución: u operas con la regla de validación o validas a través del propio código.
Voy a suponer lo siguiente (tú después deberás cambiar mis suposiciones por los nombres que tengas en tu BD):
La tabla que contiene la información se llama "TPacientes"
El campo que guarda el número de historia se llama SI, y es coincidente con el del formulario (Propiedades del campo -> Pestaña Otras -> Nombre). Además, ese campo tiene un tipo de datos numérico.
Supongamos que la regla de validación fuera que el valor debe ser mayor que cero.
En primer lugar, eliminas la regla de validación, ya que la controlaremos a través del código.
En segundo lugar el código que debes asignarle al evento "Después de actualizar" sería:
...
Private sub...
'Declaramos las variables
Dim nSI as Long, nSIT as Variant
'Cogemos el valor introducido en el campo
nSI = nz(me.SI.Value,-1)
'Si el valor está en blanco salimos
If nSI=0 then Exit Sub
'Aquí la regla de validación:
'Si el valor introducido es menor que cero avisamos, borramos el valor introducido
'y saltamos a 'Borramos'
If nSI<0 Then
msgbox "No se admiten valore negativos",vbinformation,"ERROR"
Goto Borramos
End If
'Buscamos si el valor ya existe en la tabla
nSIT = dlookup("[SI]","TPacientes","[SI]=" & nSI)
'Si devuelve valor es que ya existe. Avisamos y saltamos a 'Borramos'
If not isnull(nSIT) Then
MsgBox "El valor introducido ya existe",vbInformation,"DUPLICADO"
goto Borramos
End If
'Salimos del proceso "normal"
Exit Sub
Borramos:
me.SI.Value=null
End Sub
...
Evidentemente este es un código de ejemplo que no sé si se adapta totalmente a las características de tu BD. Si tienes algún probema me comentas.