Hola, me he estado rompiendo la cabeza con el asunto de la autonumeración personalizada, secuencial con reinicio anual. He utilizado tanto las indicaciones que has dado en la consulta: "Como crear un numero consecutivo personalizado en access", como otra que encontré en un blog: https://www.accessyexcel.com/cinco-formas-de-generar-un-valor-unico-para-usarlo-como-campo-clave/ y ninguna de las formas me funciona. He borrado todos los datos de la tabla, he vuelto a ingresar registros y nada. Copio los dos códigos que he usado y ninguno de los dos me funciona, no 'escribe' automáticamente el código, aunque no aparece ningún error.
Este es el código que tu recomendaste:
vAutonum As Variant, vUltimo As Variant
Dim vAño As Long
'Le damos a la var. vAño el valor del año actual
vAño = Right(Year(Date),4)
'Cogemos el valor del campo IdREGISTRE
vAutonum = Me. IdREGISTRE.Value
'Si vAutonum no es nulo, es porque ya hay valor en él, entonces salimos del procedimiento
If Not IsNull(vAutonum) Then Exit Sub
'vUltimo es igual al máximo de los 4 últimos caracteres de la derecha del campo
' IdREGISTRE y cuyo año sea igual al actual
vUltimo = Right(DMax("IdREGISTRE ", "TREGISTRE", "Left(IdREGISTRE, 4)=" & vAño), 4)
'Si vUltimo es nulo, es porque no hay ningún cve_folio, entonces le damos valor 0
If IsNull(vUltimo) Then
vUltimo = 0
End If
'Sumamos 1 al valor anterior
vUltimo = Right(DMax("IdREGISTRE ", "TREGISTRE", "Left(IdREGISTRE, 4)=" & vAño), 4)
Me.cve_folio= vAño & Format(vUltimo, "0000")
El que escribiste en la BD que te envie:
Private Sub Form_Current()
Dim vUltimo As Long
Dim vContador As String
Dim rst As DAO.Recordset
Const miSQL As String = "SELECT Mid([IdREGISTRE],5,3) AS Expr1 FROM TREGISTRE WHERE ((Right([IdREGISTRE],4)=Year(Date()))) ORDER BY Mid([IdREGISTRE],5,3)"
If Not IsNull(Me.IdREGISTRE) Then Exit Sub 'Si ya hay un num. oficio, sales sin hacer nada
Set rst = CurrentDb.OpenRecordset(miSQL)
'Si no devuelve registro, inicias el contador
If rst.RecordCount = 0 Then
vUltimo = 0
Else
'Si devuelve registros, coges el último
rst.MoveLast
vUltimo = rst(0)
End If
'Cierras el recordset
rst.Close
Set rst = Nothing
'Le añades uno al contador
vUltimo = vUltimo + 1
'Creas el contador
vContador = Year(Date) & Format(vUltimo, "0000")
'Lo muestras en el cuadro de texto:
Me.IdREGISTRE = vContador
End Sub
este otro:
Private Sub FORM_Current ()
If Not Me.NewRecord Then Exit Sub
Me.IdRegistre = Year(Date) & Format(Nz(DMax("Val( Mid(IdRegistre, 4))", "TRegistre", "Val( Left(IdRegistre,4)) = " & Year (date)), 0) + 1, "0000")
End Sub
Ninguno de los tres funciona. Se te ocurre una solución? Gracias y espero no molestarte más