En primer lugar es imprescindible que SUBID esté informado en la primera visita. Una parte del proceso consiste en "identificar" quién es el paciente, y si no está identificado...
De hecho, te recomiendo muchísimo que todos los campos de tu tabla estén informados, si realmente hay valor, porque te evitará muchos problemas. Por ejemplo, si intentas hacer una consulta por el número de paciente te saldrá siempre mal porque Access buscará por ese número, y si no está evidentemente no te lo mostrará.
Por otra parte, y dando por supuesto que tienes la primera visita con el SUBID correctamente informado, cambia el código que tienes por este otro:
...
Private Sub cmdAbreRDatos_Click()
'Declaramos las variables
Dim miSql As String
Dim miSqlPacientes As String
Dim vDias As Long
Dim vFecha As Date
Dim rst As DAO.Recordset
Dim rstSql As DAO.Recordset
'Inicializamos vDias
vDias = 0
'Creamos la SQL con la lista de pacientes
miSqlPacientes = "SELECT DISTINCT ALLSUB.SUBID FROM ALLSUB"
'Creamos el recordset sobre la SQL
Set rstSql = CurrentDb.OpenRecordset(miSqlPacientes)
'Nos movemos al primer registro
With rstSql
.MoveFirst
'Recorremos los registros hasta el final
Do Until .EOF
'Creamos una nueva SQL para ir calculando los días
miSql = "SELECT * FROM ALLSUB" _
& " WHERE ALLSUB.SUBID='" & .Fields(0).Value & "'" _
& " ORDER BY ALLSUB.VISDAT"
'Creamos el recordset sobre la consulta
Set rst = CurrentDb.OpenRecordset(miSql)
'Iniciamos el proceso de rellenado de datos
rst.MoveFirst
'Rellenamos el primer registro y cogemos el dato de la fecha
rst.Edit
rst.Fields("DiasEntreVisitas").Value = vDias
rst.Update
vFecha = rst.Fields("VISDAT").Value
'Nos movemos al siguiente registro
rst.MoveNext
Do Until rst.EOF
'Calculamos los días transcurridos
vDias = rst.Fields("VISDAT").Value - vFecha
'Escribimos el valor del número de días transcurrido
rst.Edit
rst.Fields("DiasEntreVisitas").Value = vDias
rst.Update
'Cogemos el valor de la fecha
vFecha = rst.Fields("VISDAT").Value
'Reinicializamos vDias
vDias = 0
'Nos movemos al siguiente registro
.MoveNext
Loop
End With
'Abrimos el informe en vista previa
DoCmd.OpenReport "RDatos", acViewPreview 'Si lo dejas en <DoCmd.OpenReport "RDatos">
'te lo enviará directamente a la impresora predet.
'Cerramos conexiones y liberamos memoria
rstSql.Close
rst.Close
Set rstSql = Nothing
Set rst = Nothing
End Sub
...
He cambiado un poco la mecánica de trabajo respecto a filtros y ordenaciones para ajustarla a lo que tienes en tu BD.
A ver si así te funciona.