Todoaccess.com Access, desarrollo a medida, programas, software, ERP, aplicaciones, soporte, Contabilidad, Gestion Comercial, Análisis financiero, Caja, Facturas, consultas on line, articulos, tablas, formularios, informes, macros, VBA, enlaces, libros, revistas, formacion
todoAccess Articulos
todoAccess Articulos

Articulos

Inicio (Articulos)

Tablas

Formularios

Consultas

Macros

Informes

Modulos

todoAccess Convertir números a texto

Convertir Números a Texto vs Conversor de Euros    ** NUEVO **

 

***** ARTICULO REVISADO ******

 

Una de las utilidades que los usuarios de Access demandan con mas insistencia es la relativa a una función que les convierta números a texto. Además, con la introducción del Euro, el problema se complicaba por la aparición de los céntimos.

 

Desde este Articulo queremos ofrecer una función bastante sencilla que obtiene el texto correspondiente a partir de una cantidad, y que se puede implementar fácilmente en cualquier objeto de Access (Formularios, Informes, Módulos, etc.).

 

La funcionalidad de este aplicativo esta dividida en dos funciones.

 

Convertidor(Cantidad, Moneda, Genero, Decimales)

 

Esta Función puede ser llamada desde cualquier Objeto de Access, y solo tenemos que darle cuatro valores, la cantidad que queremos convertir, la moneda en la que deseamos nos devuelva la cadena, el genero de esa moneda y los decimales para los céntimos.

 

ConvertidorMatricial(Cantidad, Genero)

 

Función Principal de traducción a texto.

 

Además se deben declarar algunas variables en el modulo para evitar repeticiones, y mantenerlas activadas durante el proceso.

 

El código que a continuación se expone puede ser copiado y pegado en un módulo nuevo de Access, para posterior mente llamar a la función principal Convertidor()

 

'********************************************************
' MODULO: Conversor a Euros.
' DECLARACION DE VARIABLES
' (C) Angel Pérez Díaz. Año 2006. Todos los Derechos Reservados.
'********************************************************
Option Compare Database
Option Explicit
Global Const FEMENINO = 0 ' Definición de Genero Femenino
Global Const MASCULINO = 1 ' Definición de Genero Masculino
Global Const NEUtrO = 2 ' Definición de Genero Neutro
Global Const Titulo = "Conversor Euros"
'********************************************************
' Función: Convertidor
' Descripción: Convierte un número a Texto (Control de la moneda y los decimales).
' (C) Angel Pérez Díaz. Año 2006. Todos los Derechos Reservados.
'********************************************************
Function Convertidor(Cantidad, Moneda, Genero, Decimales) As String
On Error GoTo Error_Convertidor
Dim ParteEntera As Long, ParteDecimal As Long
ParteEntera = Fix(Cantidad)
If ParteEntera > 999999999 Then
MsgBox "Este Conversor solo admite hasta 999.999.999,99 Euros.", 16, "Conversor Euros"
Exit Function
End If
Convertidor = Rtrim(ConvertidorMatricial(ParteEntera, Genero)) & " " & Moneda
If Fix(Cantidad) > 1 Then
Convertidor = Convertidor & "s"
End If
If InStr(1, Cantidad, ",") <> 0 Then
ParteDecimal = CStr(Right(Cantidad, Len(Cantidad) - InStr(1, Cantidad, ","))) & "000000"
ParteDecimal = Left(ParteDecimal, Decimales)
Convertidor = Convertidor & " con " & ConvertidorMatricial(ParteDecimal, Genero) & " centimos."
End If
Convertidor = UCase(Convertidor)
Exit Function
Error_Convertidor:
MsgBox Error$, 48, Titulo
Exit Function
Resume
End Function
'********************************************************
' Función: ConvertidorMatricial
' Descripción: Convierte un número a Texto (Función Auxiliar de traducción a Texto).
' (C) Angel Pérez Díaz. Año 2006. Todos los Derechos Reservados.
'********************************************************
Function ConvertidorMatricial(Cantidad, Genero) As String
On Error GoTo Error_ConvertidorMatricial
Static Convertir1(16) As String
Static Convertir2(10) As String
Static Convertir3(10) As String
Dim TextoObtenido As String

Convertir1(1) = "UNO"
Convertir1(2) = "DOS"
Convertir1(3) = "trES"
Convertir1(4) = "CUAtrO"
Convertir1(5) = "CINCO"
Convertir1(6) = "SEIS"
Convertir1(7) = "SIETE"
Convertir1(8) = "OCHO"
Convertir1(9) = "NUEVE"
Convertir1(10) = "DIEZ"
Convertir1(11) = "ONCE"
Convertir1(12) = "DOCE"
Convertir1(13) = "trECE"
Convertir1(14) = "CATORCE"
Convertir1(15) = "QUINCE"
Convertir2(1) = "DIECI"
Convertir2(2) = "VEINTI"
Convertir2(3) = "trEINTA"
Convertir2(4) = "CUARENTA"
Convertir2(5) = "CINCUENTA"
Convertir2(6) = "SESENTA"
Convertir2(7) = "SETENTA"
Convertir2(8) = "OCHENTA"
Convertir2(9) = "NOVENTA"
Convertir3(1) = "CIENTO"
Convertir3(2) = "DOS"
Convertir3(3) = "trES"
Convertir3(4) = "CUAtrO"
Convertir3(5) = "QUINIEN"
Convertir3(6) = "SEIS"
Convertir3(7) = "SETE"
Convertir3(8) = "OCHO"
Convertir3(9) = "NOVE"
If Genero = 0 Then
Convertir1(1) = "UNA"
Else
Convertir1(1) = "UN"
End If
Dim Unidad, Decena, Centena
Dim CantidadConvertir
CalculoUnidad:
Unidad = Len(Cantidad)
CantidadConvertir = Left(Cantidad, 1)

CalcularUnidades:
If Unidad = 1 Then ' ** unidades
TextoObtenido = TextoObtenido & Convertir1(Val(CantidadConvertir))
GoTo Exit_ConvertidorMatricial
Else
If Unidad = 4 Or Unidad = 7 Or Unidad = 10 Then ' ** Unidades Superiores
Select Case Unidad
Case 4
If CantidadConvertir = 1 And TextoObtenido = "" Then
TextoObtenido = TextoObtenido & "MIL "
Else
TextoObtenido = TextoObtenido & Convertir1(CantidadConvertir) & " MIL "
End If
Case 7
If TextoObtenido = "" Then
If CantidadConvertir = 1 Then
TextoObtenido = TextoObtenido & Convertir1(CantidadConvertir) & " MILLON "
If Right(Cantidad, 6) = 0 Then
TextoObtenido = TextoObtenido & "DE"
GoTo Exit_ConvertidorMatricial
End If
Else
TextoObtenido = TextoObtenido & Convertir1(CantidadConvertir) & " MILLONES "
End If
End If
Case 10
If TextoObtenido = "" Then
TextoObtenido = TextoObtenido & Convertir1(CantidadConvertir) & " MIL "
End If
End Select
Cantidad = Right(Cantidad, Len(Cantidad) - 1)
GoTo CalculoUnidad
End If
End If

CalcularDecenas:
If Unidad = 2 Or Unidad = 5 Or Unidad = 8 Then ' ** decenas
Decena = Left(Cantidad, 2)
Select Case Decena
Case 10
TextoObtenido = TextoObtenido & "DIEZ"
If Len(Cantidad) = 2 Then GoTo Exit_ConvertidorMatricial
Case 20
TextoObtenido = TextoObtenido & "VEINTE"
If Len(Cantidad) = 2 Then GoTo Exit_ConvertidorMatricial
Case Else
If Left(Cantidad, 2) <= 15 Then
TextoObtenido = TextoObtenido & Convertir1(Decena)
If Len(Cantidad) = 2 Then GoTo Exit_ConvertidorMatricial
Else
TextoObtenido = TextoObtenido & Convertir2(Left(Decena, 1))
If CantidadConvertir <> 1 And CantidadConvertir <> 2 And Right(Decena, 1) <> 0 Then
TextoObtenido = TextoObtenido & " Y " & Convertir1(Right(Decena, 1))
Else
TextoObtenido = TextoObtenido & Convertir1(Right(Decena, 1))
End If
If Len(Cantidad) = 2 Then GoTo Exit_ConvertidorMatricial
End If
End Select
Select Case Unidad
Case 5
TextoObtenido = TextoObtenido & " MIL "
Case 8
TextoObtenido = TextoObtenido & " MILLONES "
If Right(Cantidad, 7) = 0 Then
TextoObtenido = TextoObtenido & "DE"
GoTo Exit_ConvertidorMatricial
End If
End Select
Cantidad = Right(Cantidad, Len(Cantidad) - 2)
GoTo CalculoUnidad
End If

CalcularCentenas:
If Unidad = 3 Or Unidad = 6 Or Unidad = 9 Then ' ** centenas
Centena = Left(Cantidad, 3)
If Centena = 100 Then
TextoObtenido = TextoObtenido & "CIEN"
Else
If Left(Centena, 1) <> 1 Then
If Genero = 0 Then
TextoObtenido = TextoObtenido & Convertir3(CantidadConvertir) & "CIENTAS "
Else
TextoObtenido = TextoObtenido & Convertir3(CantidadConvertir) & "CIENTOS "
End If
Else
TextoObtenido = TextoObtenido & Convertir3(CantidadConvertir) & " "
End If
End If
Select Case Unidad
Case 3
If Right(Centena, 2) = 0 And Len(Cantidad) = 3 Then
GoTo Exit_ConvertidorMatricial
Else
Cantidad = Right(Cantidad, Len(Cantidad) - 1)
End If
Case 6
If Right(Cantidad, 5) = 0 Then
TextoObtenido = TextoObtenido & " MIL "
GoTo Exit_ConvertidorMatricial
End If
If Right(Centena, 2) = 0 Then
TextoObtenido = TextoObtenido & " MIL "
Cantidad = Right(Cantidad, Len(Cantidad) - 3)
Else
Cantidad = Right(Cantidad, Len(Cantidad) - 1)
End If
Case 9
If Right(Cantidad, 8) = 0 Then
TextoObtenido = TextoObtenido & " MILLONES DE"
GoTo Exit_ConvertidorMatricial
End If
If Right(Centena, 2) = 0 Then
TextoObtenido = TextoObtenido & " MILLONES "
Cantidad = Right(Cantidad, Len(Cantidad) - 3)
Else
Cantidad = Right(Cantidad, Len(Cantidad) - 1)
End If
End Select
GoTo CalculoUnidad
End If

Exit_ConvertidorMatricial:
ConvertidorMatricial = TextoObtenido
Exit Function
Error_ConvertidorMatricial:
MsgBox Error$, 48, Titulo
Exit Function
Resume
End Function

'*****************************************************************
 

Una vez copiado el código, se puede hacer una llamada desde la ventana de inmediato, para comprobar la funcionalidad con el siguiente ejemplo:

 

?Convertidor (125328.58,"EUROS",MASCULINO,2)

 

La función devolverá la cadena:

 

CIENTO VEINTICINCO MIL trESCIENTOS VEINTIOCHO EUROS con CINCUENTA Y OCHO Cents.

 

Ahora también podéis bajaros una pequeña aplicación basada en este articulo, donde desde un formulario podéis probar la funcionalidad. (Para bajar el programa pulsar aquí)

 

Espero que os sirva.

 

(c) Ángel Pérez Díaz. 1.993 - 2.006. Todos los Derechos Reservados.

 



Si Este Articulo no cumple con sus expectativas puede:


» Haga de todoAccess su Página Inicio

» Añada todoAccess a sus Favoritos

» Recomiende esta página

» Ayúdenos a mejorar

© Ángel Pérez Díaz, 1993-2010 - Todos los derechos reservados. - Condiciones de Uso - Declaración de Privacidad - Contacto

Dudas y sugerencias sobre este sitio: todoAccess@todoAccess.com - Web diseñada para una resolución optima de 1.280 x 1.0244

Microsoft y el logotipo de Office son marcas o marcas registradas de Microsoft Corporation en Estados Unidos y otros países

Aceptamos Tarjetas Visa y Master Card Aceptamos pagos de PayPal