Autonumérico en modo texto complicado
Tengo una duda que me está haciendo perder mucho tiempo y no consigo resolver.
Tengo una BD muy sencilla, en la que simplemente llevo un inventario de documentos en PDF que tengo guardados en mi ordenador, clasificados por temas de ingeniería: fontanería, energía solar, bombas de calor, etc...
Dispongo de una tabla llamada "DOCUMENTOS", en la que tengo las siguientes columnas (todas son de tipo texto):
- ID (clave autonumérica de ACCESS)
- AUTOR
- AÑO
- TITULO
- Tematica
- CODIGO
El campo CODIGO lo compongo aprovechando los 4 primeros caracteres de la temática del documento, más un guión bajo, y 4 dígitos correlativos, de forma que, si tengo (por ejemplo), 3 archivos relacionados con la calefacción, tendrán los códigos: CALE_0001, CALE_0002 y CALE_0003.
Mi problema radica en que yo pretendo que, al añadir un nuevo registro, con un combo despliegue todas las temáticas disponibles, y según la que yo elija, el VBA me detecte el último archivo de esa temática, y automáticamente, me coloque el código a ese nuevo registro. O, dicho de otro modo, si yo quisiera añadir un documento de calefacción, continuando con el párrafo anterior, si yo selecciono en el combo "CALEFACCIÓN", el VBA automáticamente me asignase al nuevo registro el código CALE_0004.
El código que yo estoy empleando es:
Private Sub Cuadro_combinado24_AfterUpdate()
' Al actualizar la temática
' Automáticamente, el código de documento aparece, con un número
' Más que el del último guardado
If Not Me.NewRecord Then Exit Sub
Dim tema As String, texto As String
'Guarda las primeras 4 letras de la temática (sin acentos), para crear el código
tema = Left(Me.Cuadro_combinado24, 4) & "_"
tema = Replace(tema, "Á", "A")
tema = Replace(tema, "É", "E")
tema = Replace(tema, "Í", "I")
tema = Replace(tema, "Ó", "O")
tema = Replace(tema, "Ú", "U")
texto = Format(Nz(DMax("Val(Right(CODIGO, 4))", "DOCUMENTOS", "Val(Left(CODIGO, 4)) = " & Val(tema)), 0) + 1, "0000")
End Sub
Para intentar simplificaros la tarea, mi idea es la siguiente: asigno a la variable "tema" las 4 primeras letras de la temática elegida en el cuadro desplegable 24, y le digo al VBA que encuentre el valor máximo de los códigos ya existentes, de la misma temática que tengo en la variable "tema".
Mi problema es que siempre me busca directamente el valor máximo de todos los códigos que ya existen (y no solamente de la temática que yo elijo). Si tengo 3 documentos de calefacción, pero 17 en fontanería, en vez de añadir un "0004" cuando selecciono "CALEFACCIÓN", me crea el código "CALE_0018".
Sé que es una cuestión de encontrar correctamente el registro apropiado, pero no soy capaz. Ni siquiera con DAO, en el cual aún estoy más pez, o mediante DoCmd. FindRecord, por poner un caso.