Campo para crear folios alfanumérico

Tengo un un formulario donde me gustaría que el campo Folio fuese Auto: ej. GIC/SOL/0001-16. Donde 0001 es el consecutivo y 16 son los dos últimos dígitos del año en curso.

Hasta ahora solo eh logrado que escriba "16-0001" pero no el "GIC/SOL". El código no es mio:

Dim 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), 2)
'Cogemos el valor del campo cve_folio
vAutonum = Me.Folio.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 5 últimos caracteres de la derecha del campo
'cve_folio y cuyo año sea igual al actual
vUltimo = Right(DMax("Folio", "tabSolEspacios", "Left(Folio, 2)=" & vAño), 5)
'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 = vUltimo + 1
Me.Folio = vAño & "-" & Format(vUltimo, "00000")

2 respuestas

Respuesta
3

Casi lo tenías. Pon esto como última línea:

Me.Folio = "GIC/SOL/" & vAño & "-" & Format(vUltimo, "00000")

Un saludo!


bueno... al menos ya pone el GIC/SOL/.... pero no esta haciendo la autonumeracion en 0001, vuelve a registrar 0001.  osea, el primer registro pone GIC/SOL/0001-16, y cuando paso al segundo vuelve a escribir GIC/SOL/0001-16...

Vamos a ver..., con el código que pones, el "autonumérico" te quedará así:

GIC/SOL/16-0001

GIC/SOL/16-0002

...

Que además es lo que dices que has logrado.

Si realmente quieres tenerlo así: "GIC/SOL/0001-16", además de modificar la última linea para hacer ese cambio (cosa que supongo has hecho), has de modificar el código anterior para que la variable vUltimo coja el último "consecutivo", que ahora ya no está en las últimas posiciones, sino por el medio. Por tanto, no puedes usar Right(), sino que has de usar Mid().

Este es ahora mi código, ya cambie la intentar de donde tomara los dígitos, al abrir el formulario ya muestra GIC/SOL/0001-16, pero al cambiar al sig. registro me manda un error que dice "no coinciden los tipos"

Dim 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), 2)
'Cogemos el valor del campo cve_folio
vAutonum = Me.Folio.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 5 últimos caracteres de la derecha del campo
'cve_folio y cuyo año sea igual al actual
vUltimo = Mid(DMax("Folio", "tabSolEspacios", "Right(Folio, 2)=" & vAño), 5)
'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 = vUltimo + 1
Me.Folio = "GIC/SOL/" & Format(vUltimo, "00000") & "-" & vAño

Deberías pararte a mirar cómo se usan las funciones antes de lanzarte a lo loco con ellas, jeje. Mid() requiere 3 parámetros: una cadena, la posición inicial dónde empezar y el número de caracteres a extraer, y tú solo le pasas 2...

VUltimo = Mid(DMax("Folio", "tabSolEspacios", "Right(Folio, 2)=" & vAño), 9, 5)

Y aclarate si los números van a ser de 4 o 5 dígitos, porque en el código consideras 5, pero en los datos de ejemplo solo 4, y por ahí puedes tener errores...

¡Gracias! Tienes razón, sabia que algo no cuadraba, y tienes mucha razón, tiempo de meterme de lleno no tengo, pero gracias a ustedes poco a poco voy aprendiendo mediante la practica, echando a perder se aprende je je. Te agradezco por tu tiempo y por tu ayuda.

Gracias! Y Saludos desde México!

Respuesta

Disculpa tienes archivos de prácticas que hayas hecho en access, que puedas compartirlos.

Muchas gracias por su valiosa ayuda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas