Crear nuestras propias funciones en Access nos es de mucha utilidad, nos evita generar código extra en nuestros programas.
Aquí les comparto una función propia para traducir los números a su equivalente en letras.
Supongamos que tenemos una tabla como esta:
Tenemos un campo de tipo CURRENCY por tanto es numérico, y queremos llevar este campo a letras.
Para esto nos vamos a Herramientas de Base de Datos y le datos al icono de Visual Basic, y nos abrirá la ventana de Visual Basic para Aplicaciones
Y guardan el módulo
Yo lo estoy guardando con el nombre de NumEnLetra
Ahora, desde la ventana de la base de datos, le damos Crear una nueva Consulta en Diseño de Consulta
Y agregamos la tabla donde están nuestros datos
Una vez añadidos los campos que nos interesa, incluso filtros que deseen, vamos a añadir nuestra función que recién creamos. Para esto utilizaremos el Asistente de Consultas
En la ventana que se abre, expandimos los Elementos de Expresión y buscamos el módulo que creamos
Al darle clic, nos mostrará la función que copiamos, y al darle doble clic, nos copiará la función en la ventana de Expresiones
Si observamos, vemos que nos pide un parámetro, que es el valor numérico que deseamos pasar a Letras. Así que ahora en los elementos de expresión, buscamos la tabla con la que estamos trabajando y agregaremos como parámetro para la función en campo CURRENCY que nos interesa.
Y, teniendo seleccionado el parámetro en la función, le damos doble clic al campo SALARIO y lo va a insertar como parámetro
Y listo, le damos ACEPTAR.
Vemos el campo que insertó, con el alias de Expr1, así que sería buen momento para cambiarlo
Listo! Ahora solo ejecutamos la consulta
Y tenemos ya los números en Letras
Saludos!
Aquí les comparto una función propia para traducir los números a su equivalente en letras.
Supongamos que tenemos una tabla como esta:
Tenemos un campo de tipo CURRENCY por tanto es numérico, y queremos llevar este campo a letras.
Para esto nos vamos a Herramientas de Base de Datos y le datos al icono de Visual Basic, y nos abrirá la ventana de Visual Basic para Aplicaciones
Sobre la ventana de la izquierda, de Proyecto, damos clic derecho para ver el menú y agregamos un nuevo módulo
En la ventana que se abre, verán una sola línea con el texto
Option Compare Database
Esa línea la dejan tal cual aparece y por debajo de ella insertan el siguiente código:
Function CantidadEnLetra(tyCantidad As Currency) As String
Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte
Dim lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte
Dim lcBloque As String, lnNumeroBloques As Byte, lnBloqueCero
tyCantidad = Round(tyCantidad, 2)
lyCantidad = Int(tyCantidad)
lyCentavos = (tyCantidad - lyCantidad) * 100
laUnidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIESISEIS", "DIESISIETE", "DIESIOCHO", "DIESINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE")
laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")
lnNumeroBloques = 1
Do
lnPrimerDigito = 0
lnSegundoDigito = 0
lnTercerDigito = 0
lcBloque = ""
lnBloqueCero = 0
For i = 1 To 3
lnDigito = lyCantidad Mod 10
If lnDigito <> 0 Then
Select Case i
Case 1
lcBloque = " " & laUnidades(lnDigito - 1)
lnPrimerDigito = lnDigito
Case 2
If lnDigito <= 2 Then
lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1)
Else
lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloque
End If
lnSegundoDigito = lnDigito
Case 3
lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque
lnTercerDigito = lnDigito
End Select
Else
lnBloqueCero = lnBloqueCero + 1
End If
lyCantidad = Int(lyCantidad / 10)
If lyCantidad = 0 Then
Exit For
End If
Next i
Select Case lnNumeroBloques
Case 1
CantidadEnLetra = lcBloque
Case 2
CantidadEnLetra = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & CantidadEnLetra
Case 3
CantidadEnLetra = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & CantidadEnLetra
End Select
lnNumeroBloques = lnNumeroBloques + 1
Loop Until lyCantidad = 0
CantidadEnLetra = " " & CantidadEnLetra & IIf(tyCantidad > 1, " PESOS ", " PESO ") & Format(Str(lyCentavos), "00") & "/100 M.N. "
End Function
Y guardan el módulo
Yo lo estoy guardando con el nombre de NumEnLetra
Ahora, desde la ventana de la base de datos, le damos Crear una nueva Consulta en Diseño de Consulta
Y agregamos la tabla donde están nuestros datos
Una vez añadidos los campos que nos interesa, incluso filtros que deseen, vamos a añadir nuestra función que recién creamos. Para esto utilizaremos el Asistente de Consultas
En la ventana que se abre, expandimos los Elementos de Expresión y buscamos el módulo que creamos
Al darle clic, nos mostrará la función que copiamos, y al darle doble clic, nos copiará la función en la ventana de Expresiones
Si observamos, vemos que nos pide un parámetro, que es el valor numérico que deseamos pasar a Letras. Así que ahora en los elementos de expresión, buscamos la tabla con la que estamos trabajando y agregaremos como parámetro para la función en campo CURRENCY que nos interesa.
Y, teniendo seleccionado el parámetro en la función, le damos doble clic al campo SALARIO y lo va a insertar como parámetro
Y listo, le damos ACEPTAR.
Vemos el campo que insertó, con el alias de Expr1, así que sería buen momento para cambiarlo
Listo! Ahora solo ejecutamos la consulta
Y tenemos ya los números en Letras
Saludos!