Access: cuadro que exprese en texto las diferentes cantidades
Hola:
Tengo un cuadro de texto que me da el total de una serie de operaciones, necesito incluir otro que me lea ese cuadro y me lo exprese en letras es decir, 2.500 "dos mil quinientos", 1.500.000 "un millón quinientos mil" etc.
Si me ayudas me salvas el pellejo...
Saludos
natasoft
Tengo un cuadro de texto que me da el total de una serie de operaciones, necesito incluir otro que me lea ese cuadro y me lo exprese en letras es decir, 2.500 "dos mil quinientos", 1.500.000 "un millón quinientos mil" etc.
Si me ayudas me salvas el pellejo...
Saludos
natasoft
1 Respuesta
Respuesta de pdp9
1
1
pdp9, Ingeniero en Sistemas de Información y Analista Universitario de...
Para convertir un nº a letras, preparate es algo extenso, tenés que hacer lo siguiente:
1. En la sección Módulos hacé clic en Nuevo
2. Copiá y pegá el código que está a continuación en la ventana (cuya cabecera de texto es Option Compare Database)
Option Explicit
Public Function Convertir(varCifra As Variant, strMoneda As String, bytMayusculas As Byte) As String
'Comprobar si la cifra tiene valor o excede de 9 dígitos.
If IsNull(varCifra) Or varCifra = " " Then
Convertir = ""
GoTo Fin
ElseIf varCifra > 999999999.99 Then
Convertir = "Error. Número muy grande"
GoTo Fin
End If
'Declarar variables.
Dim varLongitud As Variant 'Para saber la longitud de la cifra introducida.
Dim varConvertir1 As Variant 'Temporal.
Dim x As Long 'Contador.
Dim blnGénero As Boolean 'Para saber el Género del Tipo de la Moneda.
'Femenino: Peseta, Lira
'Masculino: Euro, Dolar, Franco, Marco
Dim strDecimales As String 'Saber el Tipo de decimales.
Dim DecDec As Byte 'Para saber la cifra que corresponde a las Decenas de Decimales
Dim UniDec As Byte 'Para saber la cifra que corresponde a las Unidades de Decimales
Dim Uni As Byte 'Para saber la cifra que corresponde a las Unidades
Dim Dec As Byte 'Para saber la cifra que corresponde a las Decenas
Dim Cen As Byte 'Para saber la cifra que corresponde a las Centenas
Dim UniMil As Byte 'Para saber la cifra que corresponde a las Unidades de Mil
Dim DecMil As Byte 'Para saber la cifra que corresponde a las Decenas de Mil
Dim CenMil As Byte 'Para saber la cifra que corresponde a las Centenas de Mil
Dim UniMill As Byte 'Para saber la cifra que corresponde a las Unidades de Millón
Dim DecMill As Byte 'Para saber la cifra que corresponde a las Decenas de Millón
Dim CenMill As Byte 'Para saber la cifra que corresponde a las Centenas Millón
Dim Almacen1 As Byte 'Sirven para almacenar temporalmente otra variable
Dim Almacen2 As Byte 'Sirven para almacenar temporalmente otra variable
Dim Almacen3 As Byte 'Sirven para almacenar temporalmente otra variable
Dim almacen4 As Variant 'Sirven para almacenar temporalmente otra variable
Dim ComaDecT As Variant 'Coma decimal
Dim UniT As Variant 'Para ir conociendo el texto que corresponde a Unidades
Dim DecT As Variant 'Para ir conociendo el texto que corresponde a Decenas
Dim CenT As Variant 'Para ir conociendo el texto que corresponde a Centenas
Dim UniMilT As Variant 'Para ir conociendo el texto que corresponde a Unidades de Mil
Dim DecMilT As Variant 'Para ir conociendo el texto que corresponde a Decenas de Mil
Dim CenMilT As Variant 'Para ir conociendo el texto que corresponde a Centenas de Mil
Dim UniMillT As Variant 'Para ir conociendo el texto que corresponde a Unidades de Millón
Dim DecMillT As Variant 'Para ir conociendo el texto que corresponde a Decenas de Millón
Dim CenMillT As Variant 'Para ir conociendo el texto que corresponde a Centenas de Millón
'Asignar valor.
varLongitud = Len(varCifra) 'Conocemos la longitud de la cifra
'Quitar el plural.
If Right(strMoneda, 1) = "s" Then
strMoneda = Left(strMoneda, (Len(strMoneda) - 1))
End If
'Conocer el Género de la moneda. True=Masculino, False=Femenino
Select Case Right(strMoneda, 1)
Case "" 'En el caso de no querer tipo de moneda.
blnGénero = True
Case "a"
blnGénero = False
Case "o"
blnGénero = True
Case "r"
blnGénero = True
Case Else
blnGénero = True
End Select
'Conocer el Tipo de decimales según sea la moneda. Se indica en singular, ya se asignará _
la s del plural según sea necesario.
Select Case strMoneda
Case "peseta"
strDecimales = "céntimo"
Case "euro"
strDecimales = "céntimo"
Case "peso"
strDecimales = "centavo"
Case "dólar"
strDecimales = "centavo"
Case Else
strDecimales = "céntimo"
End Select
'Para conocer el lugar donde esta situada la coma decimal y sabremos también la cantidad _
de decimales que hay.
For x = 0 To varLongitud - 1
ComaDecT = Mid(varCifra, varLongitud - x, 1)
If ComaDecT = "," Then
Select Case x
Case 1
UniDec = Mid(varCifra, varLongitud, 1)
varLongitud = varLongitud - (x + 1)
Case 2
DecDec = Mid(varCifra, varLongitud, 1)
UniDec = Mid(varCifra, varLongitud - 1, 1)
varLongitud = varLongitud - (x + 1) ' Ejemplos
Case Is >= 3 'varCifra es *,*** o más decimales. 413,5167 413,5147
Almacen1 = Mid(varCifra, varLongitud - (x - 1), 1) ' = 5 = 5
Almacen2 = Mid(varCifra, varLongitud - (x - 2), 1) ' = 1 = 1
Almacen3 = Mid(varCifra, varLongitud - (x - 3), 1) ' = 6 = 4
almacen4 = Mid(varCifra, varLongitud - (x), 5) ' = ",5167" = ",5147"
almacen4 = CLng(almacen4 * 100) / 100 ' = ,52 = ,51
varCifra = Int(varCifra) ' = 413 = 413
varCifra = varCifra + almacen4 ' = 413,52 = 413,51
varLongitud = Len(varCifra) 'Conocemos la nueva longitud de la varCifra
If varLongitud >= 3 Then
If Mid(varCifra, varLongitud - 1, 1) = "," Then ' varCifra = 413,5
UniDec = Mid(varCifra, varLongitud, 1)
varLongitud = varLongitud - 2 'Dejamos la longitud de varCifra sin decimales
Else
If Mid(varCifra, varLongitud - 2, 1) = "," Then 'varCifra = 413,52
DecDec = Mid(varCifra, varLongitud, 1) 'DecDec = 2
UniDec = Mid(varCifra, varLongitud - 1, 1) 'UniDec = 5
varLongitud = varLongitud - 3 'Dejamos la longitud de varCifra sin decimales
End If
End If
End If
End Select
GoTo TRABAJO 'Ya sabemos los decimales y nos vamos al resto.
End If
Next x
TRABAJO:
If varLongitud = 9 Then CenMill = Mid(varCifra, varLongitud - 8, 1) 'Centenas de Millón
If varLongitud >= 8 Then DecMill = Mid(varCifra, varLongitud - 7, 1) 'Decenas de Millón
If varLongitud >= 7 Then UniMill = Mid(varCifra, varLongitud - 6, 1) 'Unidades de Millón
If varLongitud >= 6 Then CenMil = Mid(varCifra, varLongitud - 5, 1) 'Centenas de Mil
If varLongitud >= 5 Then DecMil = Mid(varCifra, varLongitud - 4, 1) 'Decenas de Mil
If varLongitud >= 4 Then UniMil = Mid(varCifra, varLongitud - 3, 1) 'Unidades de Mil
If varLongitud >= 3 Then Cen = Mid(varCifra, varLongitud - 2, 1) 'Centenas
If varLongitud >= 2 Then Dec = Mid(varCifra, varLongitud - 1, 1) 'Decenas
If varLongitud >= 1 Then Uni = Mid(varCifra, varLongitud, 1) 'Unidades
'Dependiendo la longitud, se realizara un procedimiento
If varLongitud = 9 Then GoSub CentenasMillón '555.555.555
If varLongitud = 8 Then GoSub DecenasMillón '55.555.555
If varLongitud = 7 Then GoSub UnidadesMillón '5.555.555
If varLongitud = 6 Then GoSub CentenasMil '555.555
If varLongitud = 5 Then GoSub DecenasMil '55.555
If varLongitud = 4 Then GoSub UnidadesMil '5.555
If varLongitud = 3 Then GoSub Centenas '555
If varLongitud = 2 Then GoSub Decenas '55
If varLongitud = 1 Then GoSub Unidades '5
'Comprobar si la cifra es solo de millones para añadir "de" antes del tipo de Moneda. _
Ejem. 1.000.000 o 3.000.000 hay que indicar XX millón de pesetas.
If varLongitud > 6 Then
If Mid(varCifra, varLongitud - 5, varLongitud) = 0 Then
' MsgBox Mid(varCifra, varLongitud - 6, varLongitud)
Convertir = Convertir & " de"
End If
End If
'Asignar el valor final
Select Case Convertir
Case "un"
Convertir = Convertir & " " & strMoneda
Case "una"
Convertir = Convertir & " " & strMoneda
Case Else
'Consultar si no tiene la cadena del tipo de moneda.
If Not Right(strMoneda, 1) = "" Then
'Comprobar si el tipo de moneda es dolar y plural, en este caso añadir "e"
If Right(strMoneda, 1) = "r" Then
Convertir = Convertir & " " & strMoneda
Else
Convertir = Convertir & " " & strMoneda
End If
End If
End Select
'Subrutinas de trabajo.
Decimales:
If DecDec > 0 Then
GoSub DecenasDecimal
Else
If UniDec > 0 Then
GoSub UnidadesDecimal
End If
End If
'Convertir el tipo de letra según selección.
Select Case bytMayusculas
Case 1 'Primera letra mayúscula.
Convertir = Chr(Asc(Mid(Convertir, 1, 1)) - 32) & Mid(Convertir, 2, Len(Convertir))
Case 2 'Todas Primeras Letras De Palabras En Mayúsculas.
Convertir = strPrimerasMayusculas(Convertir)
Case 3 'TODAS LAS LETRAS EN MAYÚSCULAS.
Convertir = UCase(Convertir)
Case Else
'En otros casos, todo en minusculas.
End Select
'Salir de la función al terminar el procedimiento.
GoTo Fin
'***********************************
DecenasDecimal: 'Asignar valor a las Decenas de Decimal
If UniDec = 0 Then 'En este caso no hay unidades de decimales
Almacen1 = DecDec: Uni = DecDec
varConvertir1 = Convertir
GoSub Unidades
If Left(varConvertir1, 4) = "cero" Then 'Las Decenas de Decimal = 0
If Convertir = "una" Then 'Cambiamos de genero al ser céntimos masculino
Convertir = "un" 'y ademas es singular
Convertir = Convertir & " " & strDecimales & " de " & strMoneda
ElseIf Convertir = "un" Then
Convertir = Convertir & " " & strDecimales & " de " & strMoneda
Else
Convertir = Convertir & " " & strDecimales & " de " & strMoneda
End If
Else
If Convertir = "una" Then 'Cambiamos de genero al ser céntimos masculino
Convertir = "un" 'y ademas es singular
Convertir = varConvertir1 & " con " & Convertir & " " & strDecimales
Else
Convertir = varConvertir1 & " con " & Convertir & " " & strDecimales
End If
End If
Else
varConvertir1 = Convertir
GoTo UnidadesDecimal
End If
Return 'Fin de Decenas de Decimal
UnidadesDecimal: 'Asignar valor a las Unidades de Decimal
Almacen1 = UniDec: Almacen2 = DecDec
Dec = UniDec: Uni = DecDec
varConvertir1 = Convertir
GoSub Decenas
If Right(Convertir, 3) = "una" Then 'Cambiamos de genero al ser céntimos masculino
varLongitud = Len(Convertir)
Convertir = Left(Convertir, varLongitud - 1)
End If
If Left(varConvertir1, 4) = "cero" Then
Convertir = Convertir & " " & strDecimales & " de " & strMoneda
Else
Convertir = varConvertir1 & " con " & Convertir & " " & strDecimales
End If
Return
Unidades: 'Asignar valor de los Unidades
Select Case Uni
Case 0: UniT = "cero": Case 2: UniT = "dos"
Case 3: UniT = "tres": Case 4: UniT = "cuatro": Case 5: UniT = "cinco"
Case 6: UniT = "seis": Case 7: UniT = "siete": Case 8: UniT = "ocho"
Case 9: UniT = "nueve"
Case Else
'En caso de ser 1, asignar comprobando el Género de la moneda.
UniT = IIf(blnGénero = True, "un", "una")
End Select
Convertir = UniT
Return 'Fin de Unidades
Decenas: 'Asignar valor de las Decenas
If Dec > 0 And Dec < 3 Then
Select Case Dec & "" & Uni
Case 10: DecT = "diez": Case 11: DecT = "once"
Case 12: DecT = "doce": Case 13: DecT = "trece"
Case 14: DecT = "catorce": Case 15: DecT = "quince"
Case 16: DecT = "dieciséis": Case 17: DecT = "diecisiete"
Case 18: DecT = "dieciocho": Case 19: DecT = "diecinueve"
Case 20: DecT = "veinte":
Case 22: DecT = "veintidós": Case 23: DecT = "veintitrés"
Case 24: DecT = "veinticuatro": Case 25: DecT = "veinticinco"
Case 26: DecT = "veintiséis": Case 27: DecT = "veintisiete"
Case 28: DecT = "veintiocho": Case 29: DecT = "veintinueve"
Case Else
'En caso de ser 21, asignar comprobando el Género de la moneda.
DecT = IIf(blnGénero = True, "veintiún", "veintiuna")
End Select
Convertir = DecT 'Asignamos el texto correspondiente a la CIFRA
Return
Else
Select Case Dec
Case 3: DecT = "treinta": Case 4: DecT = "cuarenta"
Case 5: DecT = "cincuenta": Case 6: DecT = "sesenta"
Case 7: DecT = "setenta": Case 8: DecT = "ochenta"
Case 9: DecT = "noventa"
End Select
If Dec >= 3 And Uni >= 1 Then 'Si CIFRA > 31 y unidades distinto a 0
GoSub Unidades 'Nos vamos a Unidades
Convertir = DecT + " y " + Convertir 'Asignamos el texto correspondiente
Else
Convertir = DecT
End If
End If 'Fin de Dec < 3
Return 'Fin de Decenas
Centenas: 'Asignar valor de las Centenas
Select Case Cen
Case 1:
If Cen = 1 And Dec = 0 And Uni = 0 Then 'Si el valor es 100 justos.
CenT = "cien"
Convertir = CenT
Return
Else 'Si el valor es superior a 100
CenT = "ciento"
End If
Case 2: CenT = "doscient": Case 3: CenT = "trescient"
Case 4: CenT = "cuatrocient": Case 5: CenT = "quinient"
Case 6: CenT = "seiscient": Case 7: CenT = "setecient"
Case 8: CenT = "ochocient": Case 9: CenT = "novecient"
End Select
If Not CenT = "" Then
If CenT <> "ciento" Then
CenT = CenT & IIf(blnGénero = True, "os", "as")
End If
End If
If Dec + Uni = 0 Then Convertir = CenT: Return 'El valor es 200,300, etc.
If Dec = 0 And Uni >= 1 Then 'El valor es 101, 308, 405, 909, etc
GoSub Unidades 'Nos vamos a asignar las unidades
Else
GoSub Decenas 'Nos vamos a asignar las decenas
End If
Convertir = CenT + " " + Convertir
Return 'Fin de Centenas
UnidadesMil: 'Asignar valor de las Unidades de mil
Almacen1 = Uni: Uni = UniMil 'Saber el valor de Unidades de mil
GoSub Unidades
Uni = Almacen1: UniT = "" 'Devolvemos el valor y reseteamos a nulo
If UniMil = 1 Then
UniMilT = "mil"
Else
UniMilT = Convertir + " mil"
End If
If Cen + Dec + Uni = 0 Then 'El valor es 2.000, 3.000, 4.000, etc
Convertir = UniMilT
Else
GoSub Centenas
If Cen = 0 Then 'Si Centenas es cero, no añadimos el espacio
Convertir = UniMilT + Convertir
Else
Convertir = UniMilT + " " + Convertir
End If
End If
Return 'Fin de Unidades de Mil
DecenasMil: 'Asignar valor de las Decenas de Mil
Almacen1 = Uni: Almacen2 = Dec 'Como las unidades y decenas de miles son como las
Uni = UniMil: Dec = DecMil 'uni y dec normales,utilizamos la subrutina Decenas
GoSub Decenas
UniMil = Uni: DecMil = Dec 'Devolvemos cada valor a su variable correspondien.
Uni = Almacen1: Dec = Almacen2
UniT = "": DecT = "" 'Reseteamos a valor nulo los textos
DecMilT = Convertir
If Cen + Dec + Uni = 0 Then 'El valor es 2.000, 3.000
Convertir = Convertir + " mil"
Else
GoSub Centenas
If Cen = 0 Then 'Si Centenas es cero, no añadimos el espacio
Convertir = DecMilT + " mil" + Convertir
Else
Convertir = DecMilT + " mil " + Convertir
End If
End If
Return 'Fin de Decenas de Mil
CentenasMil: 'Asignar valor de las Centenas de Mil
Almacen1 = Uni: Almacen2 = Dec: Almacen3 = Cen 'Como las unidades y decenas de miles son como las
Uni = UniMil: Dec = DecMil: Cen = CenMil 'uni y dec normales,utilizamos la subrutina Decenas
GoSub Centenas
If Convertir = " una" Then: Convertir = "" 'En caso de ser *.001.*** se anula el una
Uni = Almacen1: Dec = Almacen2: Cen = Almacen3 'Devolvemos cada valor a su variable correspondien.
UniT = "": DecT = "": CenT = "" 'Reseteamos a valor nulo los textos
CenMilT = Convertir
If Cen + Dec + Uni = 0 Then
Convertir = Convertir + " mil"
Else
GoSub Centenas
If Cen = 0 Then
Convertir = CenMilT + " mil" + Convertir 'se ha quitado "mil_"
Else
Convertir = CenMilT + " mil " + Convertir 'se ha quitado "mil_"
End If
End If
Return 'Fin de Decenas de Mil
UnidadesMillón: 'Asignar valor de las Unidades de Millón
If UniMill = 1 Then
UniMillT = "un millón"
Else
Almacen1 = Uni: Uni = UniMill 'Saber el valor de Unidades de millón
GoSub Unidades
Uni = Almacen1: UniT = "" 'Devolvemos el valor y reseteamos a nulo
UniMillT = Convertir + " millones"
End If
If CenMil + DecMil + UniMil + Cen + Dec + Uni = 0 Then 'Cifra es 1.000.000
Convertir = UniMillT
Else
If CenMil + DecMil + UniMil = 0 Then 'Cifra es *.000.***
GoSub Centenas
If Cen = 0 Then 'Cifra es *.***.0**
Convertir = UniMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = UniMillT + " " + Convertir
End If
Else
GoSub CentenasMil
If CenMil = 0 Then 'Cifra es *.0**.***
Convertir = UniMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = UniMillT + " " + Convertir
End If
End If
End If
Return 'Fin de Unidades de Millón
DecenasMillón: 'Asignar valor de las Decenas de Millón
Select Case DecMill <= 2 And UniMill = 1
Case 21: DecMillT = "veintiún millón"
Case 31: DecMillT = "treintiún millón"
Case 41: DecMillT = "cuarenta y un millón"
Case 51: DecMillT = "cincuenta y un millón"
Case 61: DecMillT = "sesenta y un millón"
Case 71: DecMillT = "setenta y un millón"
Case 81: DecMillT = "ochenta y un millón"
Case 91: DecMillT = "noventa y un millón"
Case Else
Almacen1 = Uni: Almacen2 = Dec 'Como las unidades y decenas de miles son como las
Uni = UniMill: Dec = DecMill 'uni y dec normales,utilizamos la subrutina Decenas
GoSub Decenas
Uni = Almacen1: Dec = Almacen2: UniT = "": DecT = "" 'Devolmemos valor y reseteamos
DecMillT = Convertir + " millones"
End Select
If CenMil + DecMil + UniMil + Cen + Dec + Uni = 0 Then 'Cifra es **.000.000
Convertir = DecMillT
Else
If CenMil + DecMil + UniMil = 0 Then 'Cifra es **.000.***
GoSub Centenas
If Cen = 0 Then 'Cifra es **.***.0**
Convertir = DecMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = DecMillT + " " + Convertir
End If
Else
GoSub CentenasMil
If CenMil = 0 Then 'Cifra es **.0**.***
Convertir = DecMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = DecMillT + " " + Convertir
End If
End If
End If
Return 'Fin de Decenas de Millón
CentenasMillón: 'Asignar valor de las Centenas de Millón
Almacen1 = Uni: Almacen2 = Dec: Almacen3 = Cen 'Como las unidades y decenas de miles son como las
Uni = UniMill: Dec = DecMill: Cen = CenMill 'uni y dec normales,utilizamos la subrutina Decenas
GoSub Centenas
Select Case Cen 'Hay que modificar los terminos a género masculino
Case 1:
If Cen = 1 And Dec = 0 And Uni = 0 Then 'Si el valor es 100.***.***
CenT = "cien"
Convertir = CenT
Else 'Si el valor es superior a 100
CenT = "ciento"
End If
Case 2: CenT = "doscientos": Case 3: CenT = "trescientos"
Case 4: CenT = "cuatrocientos": Case 5: CenT = "quinientos"
Case 6: CenT = "seiscientos": Case 7: CenT = "setecientos"
Case 8: CenT = "ochocientos": Case 9: CenT = "novecientos"
End Select
If Dec + Uni = 0 Then: Convertir = CenT 'El valor es 200,300, etc.
If Dec = 0 And Uni >= 1 Then 'El valor es 101, 308, 405, 909, etc
GoSub Unidades 'Nos vamos a asignar las unidades
If Uni = 1 Then: Convertir = "un" 'Modificamos a masculino el uno, 201.***.***
Else
GoSub Decenas 'Nos vamos a asignar las decenas
If Uni = 1 Then
If Dec = 1 And Uni = 1 Then
Convertir = "once"
Else
If Dec = 2 And Uni = 1 Then
Convertir = "ventiún"
Else
Convertir = DecT + " y un" 'Asignamos el texto correspondiente
End If
End If
End If
End If
If Cen >= 1 And Dec = 0 And Uni = 0 Then 'Cifra es 1**.***.***
CenMillT = CenT + Convertir + " millones"
Else
CenMillT = CenT + " " + Convertir + " millones"
End If
Uni = Almacen1: Dec = Almacen2: Cen = Almacen3 'Devolvemos cada valor a su variable correspondien.
UniT = "": DecT = "": CenT = "" 'Reseteamos a valor nulo los textos
If CenMil + DecMil + UniMil + Cen + Dec + Uni = 0 Then 'Cifra es ***.000.000
Convertir = CenMillT
Else
If CenMil + DecMil + UniMil = 0 Then 'Cifra es ***.000.***
GoSub Centenas
If Cen = 0 Then 'Cifra es ***.***.0**
Convertir = CenMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = CenMillT + " " + Convertir
End If
Else
GoSub CentenasMil
If CenMil = 0 Then 'Cifra es ***.0**.***
Convertir = CenMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = CenMillT + " " + Convertir
End If
End If
End If
Return 'Fin de Centenas de Millón
Fin:
Exit Function 'Salir de la función.
End Function
Private Function strPrimerasMayusculas(strTexto As String) As String
'Convertir todos los carácteres de inicio de palabra a Mayúsculas, dejando el resto en _
minusculas.
Dim x As Long 'Contador
Dim varLongitud As Byte 'Para saber la longitud de la cifra introducida.
Dim strTexto1 As String 'Variable temporal.
varLongitud = Len(strTexto)
For x = 1 To varLongitud
strTexto1 = Mid(strTexto, x, 1)
If x = 1 Then
'Asignar la letra convertida a mayusculas.
strPrimerasMayusculas = strPrimerasMayusculas & Chr(Asc(strTexto1) - 32)
Else
If strTexto1 = " " Then
If Not Mid(strTexto, x + 1, 1) = "y" Then
'Asignar la letra convertida a mayusculas.
strPrimerasMayusculas = strPrimerasMayusculas & " " & Chr(Asc(Mid(strTexto, x + 1, 1)) - 32)
Else
strPrimerasMayusculas = strPrimerasMayusculas & " y"
End If
x = x + 1 'Sumamos una para que sea el caracter siguiente al espacio " ".
Else
strPrimerasMayusculas = strPrimerasMayusculas & strTexto1
End If
End If
Next
End Function
3. En la ventana de Propiedades, editá el campo Name (que por defecto es Módulo1), y escribí cifrasAletras
4. Cerrá el editor de código y en la sección Formularios abrí el formulario en vista diseño donde quieras realizar la conversión
5. En ese form creá un cuadro de texto, hacé doble clic en independiente
6. En la solapa Datos editá el Origen de Control y agregá la siguiente sintaxis de prueba:
=convletra([CampoCifra]," ",ValorMayusc)
donde
*[CampoCifra] es el nombre del campo donde se almacena el valor numérico a ser convertido por la función convletra, reemplazalo por el nombre de tu campo.
* " " queda así, no hay que modificarlo
* ValorMayusc (0: todas minúsculas, 1: Primeras Mayúsculas, 2: TODAS MAYUSCULAS)
por ejemplo, sea Costo un campo con valor 120
=convletra([Costo]," ",1) aplicado a un cuadro de texto Texto1
te dará como resultado
ciento veinte
También opera con decimales. Pruébalo y contame. No te olvides de calificar la respuesta.
1. En la sección Módulos hacé clic en Nuevo
2. Copiá y pegá el código que está a continuación en la ventana (cuya cabecera de texto es Option Compare Database)
Option Explicit
Public Function Convertir(varCifra As Variant, strMoneda As String, bytMayusculas As Byte) As String
'Comprobar si la cifra tiene valor o excede de 9 dígitos.
If IsNull(varCifra) Or varCifra = " " Then
Convertir = ""
GoTo Fin
ElseIf varCifra > 999999999.99 Then
Convertir = "Error. Número muy grande"
GoTo Fin
End If
'Declarar variables.
Dim varLongitud As Variant 'Para saber la longitud de la cifra introducida.
Dim varConvertir1 As Variant 'Temporal.
Dim x As Long 'Contador.
Dim blnGénero As Boolean 'Para saber el Género del Tipo de la Moneda.
'Femenino: Peseta, Lira
'Masculino: Euro, Dolar, Franco, Marco
Dim strDecimales As String 'Saber el Tipo de decimales.
Dim DecDec As Byte 'Para saber la cifra que corresponde a las Decenas de Decimales
Dim UniDec As Byte 'Para saber la cifra que corresponde a las Unidades de Decimales
Dim Uni As Byte 'Para saber la cifra que corresponde a las Unidades
Dim Dec As Byte 'Para saber la cifra que corresponde a las Decenas
Dim Cen As Byte 'Para saber la cifra que corresponde a las Centenas
Dim UniMil As Byte 'Para saber la cifra que corresponde a las Unidades de Mil
Dim DecMil As Byte 'Para saber la cifra que corresponde a las Decenas de Mil
Dim CenMil As Byte 'Para saber la cifra que corresponde a las Centenas de Mil
Dim UniMill As Byte 'Para saber la cifra que corresponde a las Unidades de Millón
Dim DecMill As Byte 'Para saber la cifra que corresponde a las Decenas de Millón
Dim CenMill As Byte 'Para saber la cifra que corresponde a las Centenas Millón
Dim Almacen1 As Byte 'Sirven para almacenar temporalmente otra variable
Dim Almacen2 As Byte 'Sirven para almacenar temporalmente otra variable
Dim Almacen3 As Byte 'Sirven para almacenar temporalmente otra variable
Dim almacen4 As Variant 'Sirven para almacenar temporalmente otra variable
Dim ComaDecT As Variant 'Coma decimal
Dim UniT As Variant 'Para ir conociendo el texto que corresponde a Unidades
Dim DecT As Variant 'Para ir conociendo el texto que corresponde a Decenas
Dim CenT As Variant 'Para ir conociendo el texto que corresponde a Centenas
Dim UniMilT As Variant 'Para ir conociendo el texto que corresponde a Unidades de Mil
Dim DecMilT As Variant 'Para ir conociendo el texto que corresponde a Decenas de Mil
Dim CenMilT As Variant 'Para ir conociendo el texto que corresponde a Centenas de Mil
Dim UniMillT As Variant 'Para ir conociendo el texto que corresponde a Unidades de Millón
Dim DecMillT As Variant 'Para ir conociendo el texto que corresponde a Decenas de Millón
Dim CenMillT As Variant 'Para ir conociendo el texto que corresponde a Centenas de Millón
'Asignar valor.
varLongitud = Len(varCifra) 'Conocemos la longitud de la cifra
'Quitar el plural.
If Right(strMoneda, 1) = "s" Then
strMoneda = Left(strMoneda, (Len(strMoneda) - 1))
End If
'Conocer el Género de la moneda. True=Masculino, False=Femenino
Select Case Right(strMoneda, 1)
Case "" 'En el caso de no querer tipo de moneda.
blnGénero = True
Case "a"
blnGénero = False
Case "o"
blnGénero = True
Case "r"
blnGénero = True
Case Else
blnGénero = True
End Select
'Conocer el Tipo de decimales según sea la moneda. Se indica en singular, ya se asignará _
la s del plural según sea necesario.
Select Case strMoneda
Case "peseta"
strDecimales = "céntimo"
Case "euro"
strDecimales = "céntimo"
Case "peso"
strDecimales = "centavo"
Case "dólar"
strDecimales = "centavo"
Case Else
strDecimales = "céntimo"
End Select
'Para conocer el lugar donde esta situada la coma decimal y sabremos también la cantidad _
de decimales que hay.
For x = 0 To varLongitud - 1
ComaDecT = Mid(varCifra, varLongitud - x, 1)
If ComaDecT = "," Then
Select Case x
Case 1
UniDec = Mid(varCifra, varLongitud, 1)
varLongitud = varLongitud - (x + 1)
Case 2
DecDec = Mid(varCifra, varLongitud, 1)
UniDec = Mid(varCifra, varLongitud - 1, 1)
varLongitud = varLongitud - (x + 1) ' Ejemplos
Case Is >= 3 'varCifra es *,*** o más decimales. 413,5167 413,5147
Almacen1 = Mid(varCifra, varLongitud - (x - 1), 1) ' = 5 = 5
Almacen2 = Mid(varCifra, varLongitud - (x - 2), 1) ' = 1 = 1
Almacen3 = Mid(varCifra, varLongitud - (x - 3), 1) ' = 6 = 4
almacen4 = Mid(varCifra, varLongitud - (x), 5) ' = ",5167" = ",5147"
almacen4 = CLng(almacen4 * 100) / 100 ' = ,52 = ,51
varCifra = Int(varCifra) ' = 413 = 413
varCifra = varCifra + almacen4 ' = 413,52 = 413,51
varLongitud = Len(varCifra) 'Conocemos la nueva longitud de la varCifra
If varLongitud >= 3 Then
If Mid(varCifra, varLongitud - 1, 1) = "," Then ' varCifra = 413,5
UniDec = Mid(varCifra, varLongitud, 1)
varLongitud = varLongitud - 2 'Dejamos la longitud de varCifra sin decimales
Else
If Mid(varCifra, varLongitud - 2, 1) = "," Then 'varCifra = 413,52
DecDec = Mid(varCifra, varLongitud, 1) 'DecDec = 2
UniDec = Mid(varCifra, varLongitud - 1, 1) 'UniDec = 5
varLongitud = varLongitud - 3 'Dejamos la longitud de varCifra sin decimales
End If
End If
End If
End Select
GoTo TRABAJO 'Ya sabemos los decimales y nos vamos al resto.
End If
Next x
TRABAJO:
If varLongitud = 9 Then CenMill = Mid(varCifra, varLongitud - 8, 1) 'Centenas de Millón
If varLongitud >= 8 Then DecMill = Mid(varCifra, varLongitud - 7, 1) 'Decenas de Millón
If varLongitud >= 7 Then UniMill = Mid(varCifra, varLongitud - 6, 1) 'Unidades de Millón
If varLongitud >= 6 Then CenMil = Mid(varCifra, varLongitud - 5, 1) 'Centenas de Mil
If varLongitud >= 5 Then DecMil = Mid(varCifra, varLongitud - 4, 1) 'Decenas de Mil
If varLongitud >= 4 Then UniMil = Mid(varCifra, varLongitud - 3, 1) 'Unidades de Mil
If varLongitud >= 3 Then Cen = Mid(varCifra, varLongitud - 2, 1) 'Centenas
If varLongitud >= 2 Then Dec = Mid(varCifra, varLongitud - 1, 1) 'Decenas
If varLongitud >= 1 Then Uni = Mid(varCifra, varLongitud, 1) 'Unidades
'Dependiendo la longitud, se realizara un procedimiento
If varLongitud = 9 Then GoSub CentenasMillón '555.555.555
If varLongitud = 8 Then GoSub DecenasMillón '55.555.555
If varLongitud = 7 Then GoSub UnidadesMillón '5.555.555
If varLongitud = 6 Then GoSub CentenasMil '555.555
If varLongitud = 5 Then GoSub DecenasMil '55.555
If varLongitud = 4 Then GoSub UnidadesMil '5.555
If varLongitud = 3 Then GoSub Centenas '555
If varLongitud = 2 Then GoSub Decenas '55
If varLongitud = 1 Then GoSub Unidades '5
'Comprobar si la cifra es solo de millones para añadir "de" antes del tipo de Moneda. _
Ejem. 1.000.000 o 3.000.000 hay que indicar XX millón de pesetas.
If varLongitud > 6 Then
If Mid(varCifra, varLongitud - 5, varLongitud) = 0 Then
' MsgBox Mid(varCifra, varLongitud - 6, varLongitud)
Convertir = Convertir & " de"
End If
End If
'Asignar el valor final
Select Case Convertir
Case "un"
Convertir = Convertir & " " & strMoneda
Case "una"
Convertir = Convertir & " " & strMoneda
Case Else
'Consultar si no tiene la cadena del tipo de moneda.
If Not Right(strMoneda, 1) = "" Then
'Comprobar si el tipo de moneda es dolar y plural, en este caso añadir "e"
If Right(strMoneda, 1) = "r" Then
Convertir = Convertir & " " & strMoneda
Else
Convertir = Convertir & " " & strMoneda
End If
End If
End Select
'Subrutinas de trabajo.
Decimales:
If DecDec > 0 Then
GoSub DecenasDecimal
Else
If UniDec > 0 Then
GoSub UnidadesDecimal
End If
End If
'Convertir el tipo de letra según selección.
Select Case bytMayusculas
Case 1 'Primera letra mayúscula.
Convertir = Chr(Asc(Mid(Convertir, 1, 1)) - 32) & Mid(Convertir, 2, Len(Convertir))
Case 2 'Todas Primeras Letras De Palabras En Mayúsculas.
Convertir = strPrimerasMayusculas(Convertir)
Case 3 'TODAS LAS LETRAS EN MAYÚSCULAS.
Convertir = UCase(Convertir)
Case Else
'En otros casos, todo en minusculas.
End Select
'Salir de la función al terminar el procedimiento.
GoTo Fin
'***********************************
DecenasDecimal: 'Asignar valor a las Decenas de Decimal
If UniDec = 0 Then 'En este caso no hay unidades de decimales
Almacen1 = DecDec: Uni = DecDec
varConvertir1 = Convertir
GoSub Unidades
If Left(varConvertir1, 4) = "cero" Then 'Las Decenas de Decimal = 0
If Convertir = "una" Then 'Cambiamos de genero al ser céntimos masculino
Convertir = "un" 'y ademas es singular
Convertir = Convertir & " " & strDecimales & " de " & strMoneda
ElseIf Convertir = "un" Then
Convertir = Convertir & " " & strDecimales & " de " & strMoneda
Else
Convertir = Convertir & " " & strDecimales & " de " & strMoneda
End If
Else
If Convertir = "una" Then 'Cambiamos de genero al ser céntimos masculino
Convertir = "un" 'y ademas es singular
Convertir = varConvertir1 & " con " & Convertir & " " & strDecimales
Else
Convertir = varConvertir1 & " con " & Convertir & " " & strDecimales
End If
End If
Else
varConvertir1 = Convertir
GoTo UnidadesDecimal
End If
Return 'Fin de Decenas de Decimal
UnidadesDecimal: 'Asignar valor a las Unidades de Decimal
Almacen1 = UniDec: Almacen2 = DecDec
Dec = UniDec: Uni = DecDec
varConvertir1 = Convertir
GoSub Decenas
If Right(Convertir, 3) = "una" Then 'Cambiamos de genero al ser céntimos masculino
varLongitud = Len(Convertir)
Convertir = Left(Convertir, varLongitud - 1)
End If
If Left(varConvertir1, 4) = "cero" Then
Convertir = Convertir & " " & strDecimales & " de " & strMoneda
Else
Convertir = varConvertir1 & " con " & Convertir & " " & strDecimales
End If
Return
Unidades: 'Asignar valor de los Unidades
Select Case Uni
Case 0: UniT = "cero": Case 2: UniT = "dos"
Case 3: UniT = "tres": Case 4: UniT = "cuatro": Case 5: UniT = "cinco"
Case 6: UniT = "seis": Case 7: UniT = "siete": Case 8: UniT = "ocho"
Case 9: UniT = "nueve"
Case Else
'En caso de ser 1, asignar comprobando el Género de la moneda.
UniT = IIf(blnGénero = True, "un", "una")
End Select
Convertir = UniT
Return 'Fin de Unidades
Decenas: 'Asignar valor de las Decenas
If Dec > 0 And Dec < 3 Then
Select Case Dec & "" & Uni
Case 10: DecT = "diez": Case 11: DecT = "once"
Case 12: DecT = "doce": Case 13: DecT = "trece"
Case 14: DecT = "catorce": Case 15: DecT = "quince"
Case 16: DecT = "dieciséis": Case 17: DecT = "diecisiete"
Case 18: DecT = "dieciocho": Case 19: DecT = "diecinueve"
Case 20: DecT = "veinte":
Case 22: DecT = "veintidós": Case 23: DecT = "veintitrés"
Case 24: DecT = "veinticuatro": Case 25: DecT = "veinticinco"
Case 26: DecT = "veintiséis": Case 27: DecT = "veintisiete"
Case 28: DecT = "veintiocho": Case 29: DecT = "veintinueve"
Case Else
'En caso de ser 21, asignar comprobando el Género de la moneda.
DecT = IIf(blnGénero = True, "veintiún", "veintiuna")
End Select
Convertir = DecT 'Asignamos el texto correspondiente a la CIFRA
Return
Else
Select Case Dec
Case 3: DecT = "treinta": Case 4: DecT = "cuarenta"
Case 5: DecT = "cincuenta": Case 6: DecT = "sesenta"
Case 7: DecT = "setenta": Case 8: DecT = "ochenta"
Case 9: DecT = "noventa"
End Select
If Dec >= 3 And Uni >= 1 Then 'Si CIFRA > 31 y unidades distinto a 0
GoSub Unidades 'Nos vamos a Unidades
Convertir = DecT + " y " + Convertir 'Asignamos el texto correspondiente
Else
Convertir = DecT
End If
End If 'Fin de Dec < 3
Return 'Fin de Decenas
Centenas: 'Asignar valor de las Centenas
Select Case Cen
Case 1:
If Cen = 1 And Dec = 0 And Uni = 0 Then 'Si el valor es 100 justos.
CenT = "cien"
Convertir = CenT
Return
Else 'Si el valor es superior a 100
CenT = "ciento"
End If
Case 2: CenT = "doscient": Case 3: CenT = "trescient"
Case 4: CenT = "cuatrocient": Case 5: CenT = "quinient"
Case 6: CenT = "seiscient": Case 7: CenT = "setecient"
Case 8: CenT = "ochocient": Case 9: CenT = "novecient"
End Select
If Not CenT = "" Then
If CenT <> "ciento" Then
CenT = CenT & IIf(blnGénero = True, "os", "as")
End If
End If
If Dec + Uni = 0 Then Convertir = CenT: Return 'El valor es 200,300, etc.
If Dec = 0 And Uni >= 1 Then 'El valor es 101, 308, 405, 909, etc
GoSub Unidades 'Nos vamos a asignar las unidades
Else
GoSub Decenas 'Nos vamos a asignar las decenas
End If
Convertir = CenT + " " + Convertir
Return 'Fin de Centenas
UnidadesMil: 'Asignar valor de las Unidades de mil
Almacen1 = Uni: Uni = UniMil 'Saber el valor de Unidades de mil
GoSub Unidades
Uni = Almacen1: UniT = "" 'Devolvemos el valor y reseteamos a nulo
If UniMil = 1 Then
UniMilT = "mil"
Else
UniMilT = Convertir + " mil"
End If
If Cen + Dec + Uni = 0 Then 'El valor es 2.000, 3.000, 4.000, etc
Convertir = UniMilT
Else
GoSub Centenas
If Cen = 0 Then 'Si Centenas es cero, no añadimos el espacio
Convertir = UniMilT + Convertir
Else
Convertir = UniMilT + " " + Convertir
End If
End If
Return 'Fin de Unidades de Mil
DecenasMil: 'Asignar valor de las Decenas de Mil
Almacen1 = Uni: Almacen2 = Dec 'Como las unidades y decenas de miles son como las
Uni = UniMil: Dec = DecMil 'uni y dec normales,utilizamos la subrutina Decenas
GoSub Decenas
UniMil = Uni: DecMil = Dec 'Devolvemos cada valor a su variable correspondien.
Uni = Almacen1: Dec = Almacen2
UniT = "": DecT = "" 'Reseteamos a valor nulo los textos
DecMilT = Convertir
If Cen + Dec + Uni = 0 Then 'El valor es 2.000, 3.000
Convertir = Convertir + " mil"
Else
GoSub Centenas
If Cen = 0 Then 'Si Centenas es cero, no añadimos el espacio
Convertir = DecMilT + " mil" + Convertir
Else
Convertir = DecMilT + " mil " + Convertir
End If
End If
Return 'Fin de Decenas de Mil
CentenasMil: 'Asignar valor de las Centenas de Mil
Almacen1 = Uni: Almacen2 = Dec: Almacen3 = Cen 'Como las unidades y decenas de miles son como las
Uni = UniMil: Dec = DecMil: Cen = CenMil 'uni y dec normales,utilizamos la subrutina Decenas
GoSub Centenas
If Convertir = " una" Then: Convertir = "" 'En caso de ser *.001.*** se anula el una
Uni = Almacen1: Dec = Almacen2: Cen = Almacen3 'Devolvemos cada valor a su variable correspondien.
UniT = "": DecT = "": CenT = "" 'Reseteamos a valor nulo los textos
CenMilT = Convertir
If Cen + Dec + Uni = 0 Then
Convertir = Convertir + " mil"
Else
GoSub Centenas
If Cen = 0 Then
Convertir = CenMilT + " mil" + Convertir 'se ha quitado "mil_"
Else
Convertir = CenMilT + " mil " + Convertir 'se ha quitado "mil_"
End If
End If
Return 'Fin de Decenas de Mil
UnidadesMillón: 'Asignar valor de las Unidades de Millón
If UniMill = 1 Then
UniMillT = "un millón"
Else
Almacen1 = Uni: Uni = UniMill 'Saber el valor de Unidades de millón
GoSub Unidades
Uni = Almacen1: UniT = "" 'Devolvemos el valor y reseteamos a nulo
UniMillT = Convertir + " millones"
End If
If CenMil + DecMil + UniMil + Cen + Dec + Uni = 0 Then 'Cifra es 1.000.000
Convertir = UniMillT
Else
If CenMil + DecMil + UniMil = 0 Then 'Cifra es *.000.***
GoSub Centenas
If Cen = 0 Then 'Cifra es *.***.0**
Convertir = UniMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = UniMillT + " " + Convertir
End If
Else
GoSub CentenasMil
If CenMil = 0 Then 'Cifra es *.0**.***
Convertir = UniMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = UniMillT + " " + Convertir
End If
End If
End If
Return 'Fin de Unidades de Millón
DecenasMillón: 'Asignar valor de las Decenas de Millón
Select Case DecMill <= 2 And UniMill = 1
Case 21: DecMillT = "veintiún millón"
Case 31: DecMillT = "treintiún millón"
Case 41: DecMillT = "cuarenta y un millón"
Case 51: DecMillT = "cincuenta y un millón"
Case 61: DecMillT = "sesenta y un millón"
Case 71: DecMillT = "setenta y un millón"
Case 81: DecMillT = "ochenta y un millón"
Case 91: DecMillT = "noventa y un millón"
Case Else
Almacen1 = Uni: Almacen2 = Dec 'Como las unidades y decenas de miles son como las
Uni = UniMill: Dec = DecMill 'uni y dec normales,utilizamos la subrutina Decenas
GoSub Decenas
Uni = Almacen1: Dec = Almacen2: UniT = "": DecT = "" 'Devolmemos valor y reseteamos
DecMillT = Convertir + " millones"
End Select
If CenMil + DecMil + UniMil + Cen + Dec + Uni = 0 Then 'Cifra es **.000.000
Convertir = DecMillT
Else
If CenMil + DecMil + UniMil = 0 Then 'Cifra es **.000.***
GoSub Centenas
If Cen = 0 Then 'Cifra es **.***.0**
Convertir = DecMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = DecMillT + " " + Convertir
End If
Else
GoSub CentenasMil
If CenMil = 0 Then 'Cifra es **.0**.***
Convertir = DecMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = DecMillT + " " + Convertir
End If
End If
End If
Return 'Fin de Decenas de Millón
CentenasMillón: 'Asignar valor de las Centenas de Millón
Almacen1 = Uni: Almacen2 = Dec: Almacen3 = Cen 'Como las unidades y decenas de miles son como las
Uni = UniMill: Dec = DecMill: Cen = CenMill 'uni y dec normales,utilizamos la subrutina Decenas
GoSub Centenas
Select Case Cen 'Hay que modificar los terminos a género masculino
Case 1:
If Cen = 1 And Dec = 0 And Uni = 0 Then 'Si el valor es 100.***.***
CenT = "cien"
Convertir = CenT
Else 'Si el valor es superior a 100
CenT = "ciento"
End If
Case 2: CenT = "doscientos": Case 3: CenT = "trescientos"
Case 4: CenT = "cuatrocientos": Case 5: CenT = "quinientos"
Case 6: CenT = "seiscientos": Case 7: CenT = "setecientos"
Case 8: CenT = "ochocientos": Case 9: CenT = "novecientos"
End Select
If Dec + Uni = 0 Then: Convertir = CenT 'El valor es 200,300, etc.
If Dec = 0 And Uni >= 1 Then 'El valor es 101, 308, 405, 909, etc
GoSub Unidades 'Nos vamos a asignar las unidades
If Uni = 1 Then: Convertir = "un" 'Modificamos a masculino el uno, 201.***.***
Else
GoSub Decenas 'Nos vamos a asignar las decenas
If Uni = 1 Then
If Dec = 1 And Uni = 1 Then
Convertir = "once"
Else
If Dec = 2 And Uni = 1 Then
Convertir = "ventiún"
Else
Convertir = DecT + " y un" 'Asignamos el texto correspondiente
End If
End If
End If
End If
If Cen >= 1 And Dec = 0 And Uni = 0 Then 'Cifra es 1**.***.***
CenMillT = CenT + Convertir + " millones"
Else
CenMillT = CenT + " " + Convertir + " millones"
End If
Uni = Almacen1: Dec = Almacen2: Cen = Almacen3 'Devolvemos cada valor a su variable correspondien.
UniT = "": DecT = "": CenT = "" 'Reseteamos a valor nulo los textos
If CenMil + DecMil + UniMil + Cen + Dec + Uni = 0 Then 'Cifra es ***.000.000
Convertir = CenMillT
Else
If CenMil + DecMil + UniMil = 0 Then 'Cifra es ***.000.***
GoSub Centenas
If Cen = 0 Then 'Cifra es ***.***.0**
Convertir = CenMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = CenMillT + " " + Convertir
End If
Else
GoSub CentenasMil
If CenMil = 0 Then 'Cifra es ***.0**.***
Convertir = CenMillT + Convertir 'Se ha quitado "mil_"
Else
Convertir = CenMillT + " " + Convertir
End If
End If
End If
Return 'Fin de Centenas de Millón
Fin:
Exit Function 'Salir de la función.
End Function
Private Function strPrimerasMayusculas(strTexto As String) As String
'Convertir todos los carácteres de inicio de palabra a Mayúsculas, dejando el resto en _
minusculas.
Dim x As Long 'Contador
Dim varLongitud As Byte 'Para saber la longitud de la cifra introducida.
Dim strTexto1 As String 'Variable temporal.
varLongitud = Len(strTexto)
For x = 1 To varLongitud
strTexto1 = Mid(strTexto, x, 1)
If x = 1 Then
'Asignar la letra convertida a mayusculas.
strPrimerasMayusculas = strPrimerasMayusculas & Chr(Asc(strTexto1) - 32)
Else
If strTexto1 = " " Then
If Not Mid(strTexto, x + 1, 1) = "y" Then
'Asignar la letra convertida a mayusculas.
strPrimerasMayusculas = strPrimerasMayusculas & " " & Chr(Asc(Mid(strTexto, x + 1, 1)) - 32)
Else
strPrimerasMayusculas = strPrimerasMayusculas & " y"
End If
x = x + 1 'Sumamos una para que sea el caracter siguiente al espacio " ".
Else
strPrimerasMayusculas = strPrimerasMayusculas & strTexto1
End If
End If
Next
End Function
3. En la ventana de Propiedades, editá el campo Name (que por defecto es Módulo1), y escribí cifrasAletras
4. Cerrá el editor de código y en la sección Formularios abrí el formulario en vista diseño donde quieras realizar la conversión
5. En ese form creá un cuadro de texto, hacé doble clic en independiente
6. En la solapa Datos editá el Origen de Control y agregá la siguiente sintaxis de prueba:
=convletra([CampoCifra]," ",ValorMayusc)
donde
*[CampoCifra] es el nombre del campo donde se almacena el valor numérico a ser convertido por la función convletra, reemplazalo por el nombre de tu campo.
* " " queda así, no hay que modificarlo
* ValorMayusc (0: todas minúsculas, 1: Primeras Mayúsculas, 2: TODAS MAYUSCULAS)
por ejemplo, sea Costo un campo con valor 120
=convletra([Costo]," ",1) aplicado a un cuadro de texto Texto1
te dará como resultado
ciento veinte
También opera con decimales. Pruébalo y contame. No te olvides de calificar la respuesta.
- Compartir respuesta
- Anónimo
ahora mismo