Hello everyone,
I am developing an Access Application to my department. There is one field called “codigoRFQ” which I want to automatize when a new record is introduced. The way we use Access is only by forms.
I am quite “new” in Access, so my code level is not high enough to build my own script, but rather I look it up through internet.
Before writing down the code, it is better to explain what it is required:
The structure of “codigoRFQ” is the followed one: yyyyddd(letter)
- yyyy: actual year we are.
- ddd: actual day we are out of 365. For example: if today is 02 February, the ddd value will be -> 032. Another one: If today is 28 May, the ddd value will be 150.
- (leter): In order to differentiate records that have the same yyyyddd values the letter is required.
For example:
2019033A … 2019034B … 2019034C … [other day] … 2019035A …
So, the idea behind is the followed: When we go into a new record, automatically “codigoRFQ” will update following the same structure as I wrote before.
I found a code which has the same principle, but its structure is like this: A0001 … A0002 … […] A9999
… B0001
I need some help in order to modify the previous code and adapt it into my own.
The link I provide has both the database and a PDF with the code, although written in Spanish.
http://neckkito.xyz/nck/index.php/ej...o-autonumerico
As you can see, the second example is the one which I considered.
Code:
'Form1: FDatos2 ->
Private Sub Form_Current()
'A tener en cuenta:
'La letra A tiene el código de carácter 65
'La letra Z tiene el código de carácter 90
'Declaramos las variables
'Con la constante miSerie indicaríamos qué letras hay que añadir antes del número
Dim miSerie As String
Dim miAN As String, ultimoAN As String
Dim ascSerie As Integer
Dim ultimoANNum As Long
'Comprobamos si hay valor en [Autonum]. Si lo hay es que estamos recorriendo
'los registros, por lo que no necesitamos calcular nada. En este caso salimos
If Not IsNull(Me.codigoRFQ.Value) Then Exit Sub
'Comprobamos cuál es el último [Autonum] introducido a través de DLast()
ultimoAN = Nz(DLast("codigoRFQ", "aa_DatosRecibidos"), "")
'Si no hay registros obtendríamos una cadena vacía (""). En este caso tendríamos
'que empezar por el primero
If ultimoAN = "" Then
'Escribimos directamente el primer valor. Lo escribiremos en función del
'tamaño de campo que hayamos establecido
Me.codigoRFQ.Value = "A0001"
Exit Sub
End If
'Cogemos el valor de la serie en la que estamos
miSerie = Left(ultimoAN, 1)
'Vamos a coger su parte numérica. Como hemos definido el tamaño
'del campo en 5 debemos coger los últimos 4 caracteres. Si hubiéramos definido el tamaño
'del campo en 8, por ejemplo, deberíamos coger los últimos 7, así:
'<ultimoANNum = CLng(Right(ultimoAN, 7))>
'Convertimos al mismo tiempo ese valor en un entero largo
ultimoANNum = CLng(Right(ultimoAN, 4))
'Le añadimos una unidad
ultimoANNum = ultimoANNum + 1
'Si el valor obtenido es menor que 9999 seguimos con el procedimiento. Lógicamente, si
'el tamaño que hubiéramos definido para el campo fuera, por ejemplo, 6, la comprobación
'se haría sobre el valor 99999
If ultimoANNum > 9999 Then
'Si pasamos el valor 9999 debemos hacer dos cosas:
'*** Empezar la numeración a 1 de nuevo
'*** Cambiar la letra de la serie
ultimoANNum = 1 'Con esto hemos reinicializado el contador
'Calculamos el valor numérico del carácter de la serie
ascSerie = Asc(miSerie)
'Le añadimos una unidad
ascSerie = ascSerie + 1
'Si el valor resultante superara el valor 90 volvemos a empezar
'por la A
If ascSerie > 90 Then ascSerie = 65
'Reconvertimos el ascii en carácter
miSerie = Chr(ascSerie)
End If
'Reconstruimos el alfanumérico teniendo en cuenta que debemos
añadir los ceros anteriores
'al número. Eso lo hacemos con la adición de cuatro ceros (la parte
'numérica) y la
'función right()
miAN = miSerie & Right("0000" & ultimoANNum, 4)
'Si hubiéramos fijado el tamaño del campo en 7, por ejemplo,
debemos:
'***Quitar una unidad para respetar la serie, por lo que nos quedan 6
'***En lugar de escribir 4 ceros escribiríamos 6 ceros, y cogeríamos los 6
' últimos caracteres de la derecha, así:
'<miSerie & Right("000000" & ultimoANNum, 6)
'Escribimos el valor en el campo del formulario
Me.codigoRFQ.Value = miAN
End Sub
I would appreciate any help provided,
Thank you in advance,
Regards.