convertir a texto

21/08/2007 - 23:30 por josse | Informe spam
hola me pasaron un programa lo edito en bisual bsic que me converte la
cantidad en en letra cuanto le doy la cantidad por ejemplo 2,650.70 me lo
convierta a letras de la siguente forma dos mil seiscientos cincuenta pesos
70/100 M.N., PERO CUANDO LE DOY CANTIDADES CERRADAS POR EJEMPLO 2650.00 ME LO
CONVIERTE A DOS MIL SEISCIENTOS CINCUENTA YO QUISIERA QUE ME TRADUCIERA A DOS
MIL SEISCIENTOS CINCUENTA PESOS 00/100 M.N. ESTUVE REVISANDO EL PROGRAMO Y NO
ENCUENTRO DONDE AGREGARLE ESTA LINEA SE LOS VOY A PASAR PARA QUE ME AGAN EL
FAVOR DE AYUDARME A ENCONTRAR EL ERROR.
Function letra(Numero)
Dim Texto
Dim Millones
Dim Miles
Dim Cientos
Dim Decimales
Dim Cadena
Dim CadMillones
Dim CadMiles
Dim CadCientos
Dim caddecimales
Texto = Round(Numero, 2)
Texto = FormatNumber(Texto, 2)
Texto = Right(Space(14) & Texto, 14)
Millones = Mid(Texto, 1, 3)
Miles = Mid(Texto, 5, 3)
Cientos = Mid(Texto, 9, 3)
Decimales = Mid(Texto, 13, 2)
CadMillones = ConvierteCifra(Millones, False)
CadMiles = ConvierteCifra(Miles, False)
CadCientos = ConvierteCifra(Cientos, True)
caddecimales = ConvierteDecimal(Decimales)

If Trim(CadMillones) > "" Then
If Trim(CadMillones) = "UN" Then
Cadena = CadMillones & " MILLON"
Else
Cadena = CadMillones & " MILLONES"
End If
End If

If Trim(CadMiles) > "" Then
If Trim(CadMiles) = "UN" Then
CadMiles = ""
Cadena = Cadena & "" & CadMiles & "MIL"
CadMiles = "UN"
Else
Cadena = Cadena & " " & CadMiles & " MIL"
End If
End If
If Trim(CadMiles) > "001" Then
CadMiles = "MIL"
End If

If Decimales = "00" Then
If Trim(CadMillones & CadMiles & CadCientos & caddecimales) = "UN" Then
Cadena = Cadena & "UNO "
Else
If Miles & Cientos = "000000" Then
Cadena = Cadena & " " & Trim(CadCientos)
Else
Cadena = Cadena & " " & Trim(CadCientos)
End If
letra = Trim(Cadena)
End If
Else
If Trim(CadMillones & CadMiles & CadCientos & caddecimales) = "UN" Then
Cadena = Cadena & "UNO " & "CON " & Trim(caddecimales)
Else
If Millones & Miles & Cientos & Decimales = "000000" Then
Cadena = Cadena & " " & Trim(CadCientos) & " PESOS " & Trim(Decimales) &
"/100 M.N."
Else
Cadena = Cadena & " " & Trim(CadCientos) & " PESOS " & Trim(Decimales) &
"/100 M.N."
End If
letra = Trim(Cadena)
End If
End If

End Function

Function ConvierteCifra(Texto, IsCientos As Boolean)
Dim Centena
Dim Decena
Dim Unidad
Dim txtCentena
Dim txtDecena
Dim txtUnidad
Centena = Mid(Texto, 1, 1)
Decena = Mid(Texto, 2, 1)
Unidad = Mid(Texto, 3, 1)
Select Case Centena
Case "1"
txtCentena = "CIEN"
If Decena & Unidad <> "00" Then
txtCentena = "CIENTO"
End If
Case "2"
txtCentena = "DOSCIENTOS"
Case "3"
txtCentena = "TRESCIENTOS"
Case "4"
txtCentena = "CUATROCIENTOS"
Case "5"
txtCentena = "QUINIENTOS"
Case "6"
txtCentena = "SEISCIENTOS"
Case "7"
txtCentena = "SETECIENTOS"
Case "8"
txtCentena = "OCHOCIENTOS"
Case "9"
txtCentena = "NOVECIENTOS"
End Select

Select Case Decena
Case "1"
txtDecena = "DIEZ"
Select Case Unidad
Case "1"
txtDecena = "ONCE"
Case "2"
txtDecena = "DOCE"
Case "3"
txtDecena = "TRECE"
Case "4"
txtDecena = "CATORCE"
Case "5"
txtDecena = "QUINCE"
Case "6"
txtDecena = "DIECISEIS"
Case "7"
txtDecena = "DIECISIETE"
Case "8"
txtDecena = "DIECIOCHO"
Case "9"
txtDecena = "DIECINUEVE"
End Select
Case "2"
txtDecena = "VEINTE"
If Unidad <> "0" Then
txtDecena = "VEINTI"
End If
Case "3"
txtDecena = "TREINTA"
If Unidad <> "0" Then
txtDecena = "TREINTA Y "
End If
Case "4"
txtDecena = "CUARENTA"
If Unidad <> "0" Then
txtDecena = "CUARENTA Y "
End If
Case "5"
txtDecena = "CINCUENTA"
If Unidad <> "0" Then
txtDecena = "CINCUENTA Y "
End If
Case "6"
txtDecena = "SESENTA"

If Unidad <> "0" Then
txtDecena = "SESENTA Y "
End If
Case "7"
txtDecena = "SETENTA"
If Unidad <> "0" Then
txtDecena = "SETENTA Y "
End If
Case "8"
txtDecena = "OCHENTA"
If Unidad <> "0" Then
txtDecena = "OCHENTA Y "
End If
Case "9"
txtDecena = "NOVENTA"
If Unidad <> "0" Then
txtDecena = "NOVENTA Y "
End If
End Select

If Decena <> "1" Then
Select Case Unidad
Case "1"
If IsCientos = False Then
txtUnidad = "UN"
Else
txtUnidad = "UNO"
End If
Case "2"
txtUnidad = "DOS"
Case "3"
txtUnidad = "TRES"
Case "4"
txtUnidad = "CUATRO"
Case "5"
txtUnidad = "CINCO"
Case "6"
txtUnidad = "SEIS"
Case "7"
txtUnidad = "SIETE"
Case "8"
txtUnidad = "OCHO"
Case "9"
txtUnidad = "NUEVE"
End Select
End If
ConvierteCifra = txtCentena & " " & txtDecena & txtUnidad
End Function


Function ConvierteDecimal(Texto)
Dim Decenadecimal
Dim Unidaddecimal
Dim txtDecenadecimal
Dim txtUnidaddecimal
Decenadecimal = Mid(Texto, 1, 1)
Unidaddecimal = Mid(Texto, 2, 1)

Select Case Decenadecimal
Case "1"
txtDecenadecimal = "DIEZ"
Select Case Unidaddecimal
Case "1"
txtDecenadecimal = "ONCE"
Case "2"
txtDecenadecimal = "DOCE"
Case "3"
txtDecenadecimal = "TRECE"
Case "4"
txtDecenadecimal = "CATORCE"
Case "5"
txtDecenadecimal = "QUINCE"
Case "6"
txtDecenadecimal = "DIECISEIS"
Case "7"
txtDecenadecimal = "DIECISIETE"
Case "8"
txtDecenadecimal = "DIECIOCHO"
Case "9"
txtDecenadecimal = "DIECINUEVE"
End Select
Case "2"
txtDecenadecimal = "VEINTE"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "VEINTI"
End If
Case "3"
txtDecenadecimal = "TREINTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "TREINTA Y "
End If
Case "4"
txtDecenadecimal = "CUARENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "CUARENTA Y "
End If
Case "5"
txtDecenadecimal = "CINCUENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "CINCUENTA Y "
End If
Case "6"
txtDecenadecimal = "SESENTA"

If Unidaddecimal <> "0" Then
txtDecenadecimal = "SESENTA Y "
End If
Case "7"
txtDecenadecimal = "SETENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "SETENTA Y "
End If
Case "8"
txtDecenadecimal = "OCHENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "OCHENTA Y "
End If
Case "9"
txtDecenadecimal = "NOVENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "NOVENTA Y "
End If
End Select

If Decenadecimal <> "1" Then
Select Case Unidaddecimal
Case "1"
txtUnidaddecimal = "UNO"
Case "2"
txtUnidaddecimal = "DOS"
Case "3"
txtUnidaddecimal = "TRES"
Case "4"
txtUnidaddecimal = "CUATRO"
Case "5"
txtUnidaddecimal = "CINCO"
Case "6"
txtUnidaddecimal = "SEIS"
Case "7"
txtUnidaddecimal = "SIETE"
Case "8"
txtUnidaddecimal = "OCHO"
Case "9"
txtUnidaddecimal = "NUEVE"
End Select
End If
If Decenadecimal = 0 And Unidaddecimal = 0 Then
ConvierteDecimal = ""
Else
ConvierteDecimal = txtDecenadecimal & txtUnidaddecimal
End If
End Function
GRASCIAS DE ANTEMANO POR LA AYUDA.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
22/08/2007 - 03:08 | Informe spam
hola, jose !

hola me pasaron un programa lo edito en bisual bsic que me converte la cantidad en en letra cuanto le doy la cantidad
por ejemplo 2,650.70 me lo convierta a letras de la siguente forma dos mil seiscientos cincuenta pesos 70/100 M.N.
PERO CUANDO LE DOY CANTIDADES CERRADAS POR EJEMPLO 2650.00 ME LO CONVIERTE A
DOS MIL SEISCIENTOS CINCUENTA YO QUISIERA QUE ME TRADUCIERA A
DOS MIL SEISCIENTOS CINCUENTA PESOS 00/100 M.N.
ESTUVE REVISANDO EL PROGRAMO Y NO ENCUENTRO DONDE AGREGARLE ESTA LINEA [...]



disculpa, pero tus gritos no me dejaron seguir *oyendo* el codigo que exponias :-((
de todos modos, ya lo revise y la falla esta en una sola linea ;)
solo que al carecer de indentaciones, es menos sencillo de revisar, asi que...
si la transcripcion es +/- igual a como la tienes en el modulo de codigo...

-> REVISA LA LINEA # 54 [incluyendo las lineas en blanco] y modifica a lo siguiente:

de: -> letra = Trim(Cadena)
a: -> letra = Trim(Cadena) & " PESOS " & Trim(Decimales) & "/100 M.N." ' <= ESTA ES LA FALLA

[por si las dudas]...

-> esta NUEVE LINEAS ABAJO del *bloque* que se inicia con una condicional que dice:

If Decimales = "00" Then

saludos,
hector.
Respuesta Responder a este mensaje
#2 Daniel SL
23/08/2007 - 01:53 | Informe spam
Hola Josse

este es el codigo del buen amigo Héctor Miguel espero y te funcione me
parece que esta un poco mejor sin hacer el feo al codigo que te dieron dale
una hojeada, insertalo en un modulo de excel. ;)





'==Option Explicit ' Declaración Obligatoria de Variables '

Function ValorEnLetras(ByVal Ref_Valor As Variant, Optional Moneda As
String, Optional ID_Fracciones As String, _
Optional ID_Moneda As String,
Optional Idioma As String, Optional MAY_min As String) As String ' Función
Principal '

Dim Abrir As String, Cerrar As String, Prefijo As String, PreFracEs As
String, _
Decimales As Variant, PostFrac As String, Fracciones As String,
FraccionesEnLetra As Boolean, LetraFracciones As String, _
Grupo As Integer, TextoDelGrupo As String, Temp As String, DosPalabras
As Integer, _
Moneda1 As String, Moneda2 As String, Monedas As String, Solitario As
String, Género As String, _
Grupo1 As String, Grupo2 As String, Grupo3 As String, Grupo4 As String,
Grupo5 As String, _
ValorTotal As Variant, EstasLetras As String, ValorFinalEnLetras As
String ' Variables específicas de la función principal -Español × omisión-
'

Dim Prefix As String, PreFracIn As String, Fractions As String,
FractionsInLetters As String
ReDim TextInGroup(9) As String
TextInGroup(2) = " Thousand "
TextInGroup(3) = " Million "
TextInGroup(4) = " Billion "
TextInGroup(5) = " Trillion " ' Variables para los textos en inglés '

If Not IsNumeric(Ref_Valor) Then
ValorEnLetras = "La Referencia... NO ES #VALOR! (ó)... ESTA FUERA DEL
%ALCANCE!"
Exit Function
ElseIf Ref_Valor = 0 Then
ValorEnLetras = "La Referencia de Valor... ES CERO (ó)... ESTA $VACIA!"
Exit Function
End If ' Si no hay valores, la función se termina '

If IsMissing(Moneda) Then Moneda = "" Else Moneda = StrConv(Trim(Moneda),
vbProperCase)
If Left(Moneda, 1) = "(" Or Left(Moneda, 1) = "[" Or Left(Moneda, 1) = "{"
Or Left(Moneda, 1) = "-" Then
Select Case Left(Moneda, 1)
Case "-"
Abrir = "-"
Cerrar = "-"
Case "("
Abrir = "("
Cerrar = ")"
Case "["
Abrir = "["
Cerrar = "]"
Case "{"
Abrir = "{"
Cerrar = "}"
Case Else
Abrir = ""
Cerrar = ""
End Select
End If ' Aquí se define si se encierra el resultado con algún caracter
válido '
If Abrir <> "" Then Moneda = StrConv(Trim(Mid(Moneda, 2)), vbProperCase)
If Moneda <> "" Then
DosPalabras = InStr(Moneda, " ")
If DosPalabras > 0 Then ' Por si se trata de una palabra compuesta '
Moneda1 = QuitarExtraños(Left(Moneda, DosPalabras - 1))
Moneda2 = QuitarExtraños(Mid(Moneda, DosPalabras + 1))
Moneda = " " & Moneda1 & " " & Moneda2
Else
Moneda = " " & QuitarExtraños(Moneda)
Moneda1 = ""
Moneda2 = ""
End If
Else
Moneda = ""
End If ' Para fijar el nombre de moneda (si se especificó alguno) '

If Ref_Valor < 0 Then ' Si hay valores, la función debe continuar '
Ref_Valor = Abs(Ref_Valor)
Prefijo = "CREDITO por: " & Abrir
Prefix = "CREDIT in: " & Abrir
Else
Prefijo = Abrir
Prefix = Abrir
End If ' Para modificar el prefijo (si son valores negativos) '

Decimales = Format(Right(Format(Round(Ref_Valor, 2), "00.00"), 2), "00") '
DANIEL Para fijar el valor de las decimales '
Ref_Valor = Int(Ref_Valor) ' Para dejar el valor de referencia en entero
sólamente '
ValorTotal = Format(Ref_Valor, "000000000000000") ' Para conservar el
valor total como referencia futura '
Grupo1 = Right(ValorTotal, 3)
Grupo2 = Mid(ValorTotal, 10, 3)
Grupo3 = Mid(ValorTotal, 7, 3)
Grupo4 = Mid(ValorTotal, 4, 3)
Grupo5 = Left(ValorTotal, 3) ' Para definir 5 grupos de 3 dígitos '
Ref_Valor = Trim(Str(Ref_Valor)) ' Representación textual del valor a
convertir '

If IsMissing(ID_Fracciones) Then ID_Fracciones = "" Else ID_Fracciones =
StrConv(Trim(ID_Fracciones), vbProperCase)
If ID_Fracciones <> "" And Left(ID_Fracciones, 1) = "#" Then
ID_Fracciones = StrConv(Trim(Mid(ID_Fracciones, 2)), vbProperCase)
ElseIf ID_Fracciones <> "" And ID_Fracciones <> "/100" Then
FraccionesEnLetra = True ' Aquí "advertimos" que las fracciones SERAN EN
TEXTO -para Español- '
FractionsInLetters = TensLetters(Right("000" & Decimales, 3)) ' Aquí
"ponemos" las fracciones en texto -para Inglés- '
End If
If ID_Fracciones <> "" And ID_Fracciones <> "/100" Then
If Right(ID_Fracciones, 1) = "." _
Then ID_Fracciones = QuitarExtraños(ID_Fracciones) & "." _
Else ID_Fracciones = QuitarExtraños(ID_Fracciones) ' Aquí quitamos
cualquier caracter "extraño" '
If FraccionesEnLetra And ID_Fracciones <> "" And Right(ID_Fracciones, 1)
<> "." Then
If Left(ID_Fracciones, 4) = "Ning" Then
Solitario = "Uno"
Else
If Right(ID_Fracciones, 2) = "as" Then Solitario = "Una" Else
Solitario = "Un"
End If
LetraFracciones = LetraDecenas(1, Right("000" & Decimales, 3),
Solitario) ' Aquí "ponemos" las fracciones en texto -para Español- '
End If
If ID_Fracciones <> "" And Right(ID_Fracciones, 1) <> "." Then
If Decimales = 1 Then
If Mid(Idioma, 2, 2) = "ng" Then
ID_Fracciones = Left(ID_Fracciones, Len(ID_Fracciones) - 1)
Else
Select Case Right(ID_Fracciones, 2)
Case "as", "os", "ms"
ID_Fracciones = Left(ID_Fracciones, Len(ID_Fracciones) - 1)
Case Else: ID_Fracciones = Left(ID_Fracciones,
Len(ID_Fracciones) - 2)
End Select
End If
ElseIf Decimales = 0 Then
If FraccionesEnLetra Then
LetraFracciones = "Cero"
FractionsInLetters = "Zero"
End If
End If
End If
End If
If ID_Fracciones <> "" Then
PreFracEs = " " 'DANIEL EL VALOR VERDADERO ES " con "
PreFracIn = " and "
If Left(ID_Fracciones, 4) = "Ning" Then
PostFrac = ""
Else
If ID_Fracciones = "/100" Then PostFrac = "/100" Else PostFrac = " " &
ID_Fracciones
End If
Else
PreFracEs = ""
PreFracIn = ""
Decimales = ""
PostFrac = ""
End If ' Para establecer el identificador y formato de las fracciones (si
se especificó alguno) '
If Decimales = 0 And ID_Fracciones <> "/100" And PostFrac <> "" Then
PreFracEs = " sin"
Decimales = " "
LetraFracciones = " "
FractionsInLetters = "No "
If PostFrac <> "/100" Then PostFrac = Mid(PostFrac, 2)
End If
If FraccionesEnLetra _
Then Fracciones = PreFracEs & LetraFracciones & PostFrac _
Else Fracciones = PreFracEs & Decimales & PostFrac ' Para las decimales
en español '
If Decimales = " " And PostFrac <> "/100" Then Decimales = "No "
If FraccionesEnLetra _
Then Fractions = PreFracIn & FractionsInLetters & PostFrac _
Else Fractions = PreFracIn & Decimales & PostFrac ' Para las decimales
en inglés '

If IsMissing(ID_Moneda) Then ID_Moneda = "" Else ID_Moneda =
StrConv(Trim(ID_Moneda), vbProperCase)
If ID_Moneda <> "" Then
If Right(ID_Moneda, 1) = "." Then ID_Moneda = QuitarExtraños(ID_Moneda)
& "." Else ID_Moneda = QuitarExtraños(ID_Moneda)
If Left(ID_Moneda, 2) = "Mn" Then ID_Moneda = "M.N."
If Left(ID_Moneda, 2) = "Uk" Then ID_Moneda = "U.K."
If Left(ID_Moneda, 3) = "Eur" Then ID_Moneda = "EUR"
If Left(ID_Moneda, 3) = "Usd" Then ID_Moneda = "U.S.D."
If Left(ID_Moneda, 4) = "Uscy" Then ID_Moneda = "U.S.Cy."
ID_Moneda = " " & ID_Moneda & Cerrar
Else
ID_Moneda = Cerrar
End If ' Para fijar el texto al final de la conversión '

If IsMissing(Idioma) Then GoTo TextoEnEspañol Else Idioma =
QuitarExtraños(Idioma)
If Mid(Idioma, 2, 2) = "ng" Then GoTo TextoEnInglés ' Para detectar si se
solicita otro idioma '

TextoEnEspañol:
If Moneda <> "" Then
If Moneda1 <> "" Then
If Right(Moneda1, 1) = "a" Or Right(Moneda1, 1) = "e" Or
Right(Moneda1, 1) = "o" Or Moneda1 = "Newton" Or Moneda1 = "Ohm" _
Then Moneda1 = Moneda1 & "s" Else Moneda1 = Moneda1 & "es"
If Moneda2 <> "Farenhit" Then
If Right(Moneda2, 1) = "a" Or Right(Moneda2, 1) = "e" Or
Right(Moneda2, 1) = "o" Or Moneda2 = "Newton" Or Moneda2 = "Ohm" _
Then Moneda2 = Moneda2 & "s" Else Moneda2 = Moneda2 & "es"
End If
Monedas = " " & Moneda1 & " " & Moneda2
Else
If Right(Moneda, 1) = "a" Or Right(Moneda, 1) = "e" Or Right(Moneda,
1) = "o" Or Moneda = " Newton" Or Moneda = " Ohm" _
Then Monedas = Moneda & "s" Else Monedas = Moneda & "es"
End If
Else
Monedas = ""
End If ' Para determinar el plural de la moneda en español '

If Moneda <> "" Then
If Right(Moneda1, 2) = "as" Or Right(Moneda, 1) = "a" Then
Solitario = "Una"
Género = "as"
Else
Solitario = "Un"
Género = "os"
End If
Else
Solitario = "Uno"
Género = "os"
End If ' Para determinar el género y la unidad monetaria '

If Val(Ref_Valor) = 0 Then
EstasLetras = "Cero"
GoTo ValorEnTexto
End If ' Si no hay enteros (pero SI decimales), omitimos la búsqueda '

Grupo = 1
Do While Ref_Valor <> ""
Temp = LetraCentenas(Grupo, Right(Ref_Valor, 3), Género, Solitario)
If Temp <> "" Then
Select Case Grupo
Case 1: TextoDelGrupo = ""
Case 2
If Val(Grupo1) > 0 Then TextoDelGrupo = " Mil " Else TextoDelGrupo
= " Mil"
Case 3
If Val(Grupo3) = 1 Then
If Val(Grupo2 & Grupo1) = 0 Then TextoDelGrupo = " Millón" Else
TextoDelGrupo = " Millón "
Else
If Val(Grupo2 & Grupo1) = 0 Then TextoDelGrupo = " Millones"
Else TextoDelGrupo = " Millones "
End If
Case 4
If Val(Grupo3) > 0 Then
TextoDelGrupo = " Mil "
Else
If Val(Grupo2 & Grupo1) = 0 Then TextoDelGrupo = " Mil Millones"
Else TextoDelGrupo = " Mil Millones "
End If
Case 5
If Val(Grupo5) = 1 Then
If Val(Grupo4 & Grupo3 & Grupo2 & Grupo1) = 0 Then TextoDelGrupo
= " Billón" Else TextoDelGrupo = " Billón "
Else
If Val(Grupo4 & Grupo3 & Grupo2 & Grupo1) = 0 Then TextoDelGrupo
= " Billones" Else TextoDelGrupo = " Billones "
End If
End Select
EstasLetras = Temp & TextoDelGrupo & EstasLetras
End If
If Len(Ref_Valor) > 3 Then Ref_Valor = Left(Ref_Valor, Len(Ref_Valor) -
3) Else Ref_Valor = ""
Grupo = Grupo + 1
Loop ' Bucle principal de la búsqueda en español '

If ValorTotal < 2 And ValorTotal > 0 Then Monedas = Moneda ' Entre 1.00 y
1.99, la moneda es singular '

If Val(Grupo5 & Grupo4 & Grupo3) > 0 And Val(Grupo2 & Grupo1) = 0 And
Monedas <> "" _
Then Monedas = " de" & Monedas ' Sin son millones pero sin miles,
pluralizamos como DE monedas '

ValorEnTexto:
If Not IsMissing(MAY_min) And QuitarExtraños(MAY_min) = "Frase" Then
EstasLetras = UCase(Left(EstasLetras, 1)) & LCase(Mid(EstasLetras, 2))
Monedas = LCase(Monedas)
Fracciones = LCase(Fracciones)
ID_Moneda = LCase(ID_Moneda)
End If
ValorFinalEnLetras = Prefijo & EstasLetras & Monedas & Fracciones &
ID_Moneda ' Texto encontrado '
GoTo FormatoDelTexto

TextoEnInglés:
If Moneda <> "" Then
If Right(Moneda, 2) = "ch" Then
Monedas = Moneda & "es"
ElseIf Right(Moneda, 4) = "Foot" Then
Monedas = Replace(Moneda, "Foot", "Feet", , , vbTextCompare)
Else
Monedas = Moneda & "s"
End If
Else
Monedas = ""
End If ' Para determinar el plural de la moneda en inglés '

If Val(Ref_Valor) = 0 Then
If Moneda <> "" Then EstasLetras = "No" Else EstasLetras = "Zero"
GoTo TextValue
End If ' Si no hay enteros (pero SI decimales), omitimos la búsqueda '

Grupo = 1
Do While Ref_Valor <> ""
Temp = HundredsLetters(Right(Ref_Valor, 3))
If Temp <> "" Then EstasLetras = Temp & TextInGroup(Grupo) & EstasLetras
If Len(Ref_Valor) > 3 Then Ref_Valor = Left(Ref_Valor, Len(Ref_Valor) -
3) Else Ref_Valor = ""
Grupo = Grupo + 1
Loop ' Bucle principal de la búsqueda en inglés '

If ValorTotal < 2 And ValorTotal > 0 Then Monedas = Moneda ' Entre 1.00 y
1.99, la moneda es singular '
If Val(Grupo1) = 0 Then EstasLetras = Left(EstasLetras, Len(EstasLetras) -
1) ' Parche para ajuste de espacios en cifras "miles" '

TextValue:
If Not IsMissing(MAY_min) And QuitarExtraños(MAY_min) = "Frase" Then
EstasLetras = UCase(Left(EstasLetras, 1)) & LCase(Mid(EstasLetras, 2))
Monedas = LCase(Monedas)
Fractions = LCase(Fractions)
ID_Moneda = LCase(ID_Moneda)
End If
ValorFinalEnLetras = Prefix & EstasLetras & Monedas & Fractions &
ID_Moneda ' Texto encontrado '

FormatoDelTexto:
If IsMissing(MAY_min) Then GoTo FinDeFunción Else MAY_min =
QuitarExtraños(MAY_min) ' Aquí definimos el tipo de letra '
If Mid(MAY_min, 2, 1) = "a" Or Mid(MAY_min, 2, 1) = "p" Then
ValorFinalEnLetras = StrConv(ValorFinalEnLetras, vbUpperCase)
If Mid(MAY_min, 2, 1) = "i" Or Mid(MAY_min, 2, 1) = "o" Then
ValorFinalEnLetras = StrConv(ValorFinalEnLetras, vbLowerCase)

FinDeFunción:
If Mid(MAY_min, 2, 1) = "a" Or Mid(MAY_min, 2, 1) = "p" Then
ValorEnLetras = ValorFinalEnLetras
Else: ValorEnLetras = AcentuarTextos(ValorFinalEnLetras)
End If ' Fin de la Función Principal '
End Function

' Función para "Limpiar" el texto de caracteres extraños '
Private Function QuitarExtraños(MiCadena As String) As String
Dim Posición As Integer, NuevaCadena As String
NuevaCadena = ""
For Posición = 1 To Len(MiCadena)
Select Case Mid(MiCadena, Posición, 1)
Case " ", "°", "|", "¬", "¡", "!", "¿", "?", "(", ")", "[", "}", "]",
"}", "#", "$", "%", "&", "'", "\", "@", "¨", "~", ";", ",", ":", "_", "<",
">", "^", "`", _
"+", "-", "*", "/", ".", "=", "0", "1", "2", "3", "4", "5", "6",
"7", "8", "9"
Case Else
NuevaCadena = NuevaCadena & Mid(MiCadena, Posición, 1)
End Select
Next
QuitarExtraños = StrConv(NuevaCadena, vbProperCase)
End Function

' Función para "acentuar" los numerales apropiados '
Private Function AcentuarTextos(ByVal Cadena As String) As String
Dim Acentuados As String
Acentuados = Replace(Cadena, "idos", "idós")
Acentuados = Replace(Acentuados, "itres", "itrés")
Acentuados = Replace(Acentuados, "iseis", "iséis")
AcentuarTextos = Acentuados
End Function

' Funciones de búsqueda de textos en español '
Private Function LetraCentenas(ByVal Grupo As String, ByVal Segmento As
String, _
ByVal Sufijo As
String, ByVal Solitario As String) As String
Dim EsteTexto As String
Segmento = Right("000" & Segmento, 3)
Select Case Val(Left(Segmento, 1))
Case 0:: EsteTexto = ""
Case 1
If Val(Segmento) = 100 Then EsteTexto = "Cien" Else EsteTexto =
"Ciento"
Case 2: EsteTexto = "Doscient"
Case 3: EsteTexto = "Trescient"
Case 4: EsteTexto = "Cuatrocient"
Case 5: EsteTexto = "Quinient"
Case 6: EsteTexto = "Seiscient"
Case 7: EsteTexto = "Setecient"
Case 8: EsteTexto = "Ochocient"
Case 9: EsteTexto = "Novecient"
End Select
If Val(Left(Segmento, 1)) > 1 Then
If Grupo > 2 Then EsteTexto = EsteTexto & "os" Else EsteTexto =
EsteTexto & Sufijo
End If
If Mid(Segmento, 2, 1) <> "0" _
Then EsteTexto = EsteTexto & LetraDecenas(Grupo, Segmento, Solitario) _
Else EsteTexto = EsteTexto & LetraUnidades(Grupo, Segmento, Solitario)
LetraCentenas = EsteTexto
End Function
Private Function LetraDecenas(ByVal Grupo As String, ByVal Segmento As
String, ByVal Solitario As String) As String
Dim EsteTexto As String
Select Case Val(Mid(Segmento, 2, 1))
Case 1
Select Case Val(Right(Segmento, 1))
Case 0: EsteTexto = "Diez"
Case 1: EsteTexto = "Once"
Case 2: EsteTexto = "Doce"
Case 3: EsteTexto = "Trece"
Case 4: EsteTexto = "Catorce"
Case 5: EsteTexto = "Quince"
Case 6 To 9: EsteTexto = "Dieci"
End Select
Case 2
If Val(Right(Segmento, 1)) > 0 Then EsteTexto = "Veinti" Else
EsteTexto = "Veinte"
Case 3: EsteTexto = "Treinta"
Case 4: EsteTexto = "Cuarenta"
Case 5: EsteTexto = "Cincuenta"
Case 6: EsteTexto = "Sesenta"
Case 7: EsteTexto = "Setenta"
Case 8: EsteTexto = "Ochenta"
Case 9: EsteTexto = "Noventa"
End Select
If Val(Right(Segmento, 1)) > 0 And Val(Mid(Segmento, 2, 1)) > 2 Then
EsteTexto = EsteTexto & " y "
If Val(Left(Segmento, 1)) > 0 Then EsteTexto = " " & EsteTexto
EsteTexto = EsteTexto & LetraUnidades(Grupo, Segmento, Solitario)
LetraDecenas = EsteTexto
End Function
Private Function LetraUnidades(ByVal Grupo As String, ByVal Segmento As
String, ByVal Solitario As String) As String
Dim EsteTexto As String
If Val(Mid(Segmento, 2, 1)) <> 1 Then
Select Case Val(Right(Segmento, 1))
Case 0:: EsteTexto = ""
Case 1
If Grupo = 1 Then EsteTexto = Solitario Else EsteTexto = "Un"
Case 2: EsteTexto = "Dos"
Case 3: EsteTexto = "Tres"
Case 4: EsteTexto = "Cuatro"
Case 5: EsteTexto = "Cinco"
End Select
End If
Select Case Val(Right(Segmento, 1))
Case 6: EsteTexto = "Seis"
Case 7: EsteTexto = "Siete"
Case 8: EsteTexto = "Ocho"
Case 9: EsteTexto = "Nueve"
End Select
If Val(Left(Segmento, 1)) > 0 And Val(Mid(Segmento, 2, 1)) = 0 And
EsteTexto <> "" Then EsteTexto = " " & EsteTexto
If Val(Mid(Segmento, 2, 1)) = 1 And Val(Right(Segmento, 1)) > 5 Then
EsteTexto = StrConv(EsteTexto, vbLowerCase)
If Val(Mid(Segmento, 2, 1)) = 2 Then EsteTexto = StrConv(EsteTexto,
vbLowerCase)
LetraUnidades = EsteTexto
End Function

' Funciones de búsqueda de textos en inglés '
Private Function HundredsLetters(ByVal Segmento As String) As String
Dim EsteTexto As String
Segmento = Right("000" & Segmento, 3)
If Left(Segmento, 1) <> "0" Then EsteTexto = UnitsLetters(Left(Segmento,
1)) & " Hundred"
If Mid(Segmento, 2, 1) <> "0" _
Then EsteTexto = EsteTexto & TensLetters(Segmento) _
Else EsteTexto = EsteTexto & UnitsLetters(Segmento)
HundredsLetters = EsteTexto
End Function
Private Function TensLetters(ByVal Segmento As String) As String
Dim EsteTexto As String
Select Case Val(Mid(Segmento, 2, 1))
Case 1
Select Case Val(Right(Segmento, 1))
Case 0: EsteTexto = "Ten"
Case 1: EsteTexto = "Eleven"
Case 2: EsteTexto = "Twelve"
Case 3: EsteTexto = "Thirteen"
Case 4: EsteTexto = "Fourteen"
Case 5: EsteTexto = "Fifteen"
Case 6: EsteTexto = "Sixteen"
Case 7: EsteTexto = "Seventeen"
Case 8: EsteTexto = "Eighteen"
Case 9: EsteTexto = "Nineteen"
End Select
Case 2: EsteTexto = "Twenty"
Case 3: EsteTexto = "Thirty"
Case 4: EsteTexto = "Forty"
Case 5: EsteTexto = "Fifty"
Case 6: EsteTexto = "Sixty"
Case 7: EsteTexto = "Seventy"
Case 8: EsteTexto = "Eighty"
Case 9: EsteTexto = "Ninety"
End Select
If Val(Left(Segmento, 1)) > 0 Then EsteTexto = " " & EsteTexto
EsteTexto = EsteTexto & UnitsLetters(Segmento)
TensLetters = EsteTexto
End Function
Private Function UnitsLetters(ByVal Segmento As String) As String
Dim EsteTexto As String
If Val(Mid(Segmento, 2, 1)) <> 1 Then
Select Case Val(Right(Segmento, 1))
Case 0:: EsteTexto = ""
Case 1: EsteTexto = "One"
Case 2: EsteTexto = "Two"
Case 3: EsteTexto = "Three"
Case 4: EsteTexto = "Four"
Case 5: EsteTexto = "Five"
Case 6: EsteTexto = "Six"
Case 7: EsteTexto = "Seven"
Case 8: EsteTexto = "Eight"
Case 9: EsteTexto = "Nine"
End Select
End If
If Val(Segmento) > 20 And EsteTexto <> "" Then EsteTexto = " " & EsteTexto
UnitsLetters = EsteTexto
End Function


Un saludo
Daniel SL.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida