Numeros a Letra

27/07/2005 - 20:31 por Oscar | Informe spam
Hola Hector Barajas:

Una duda, he visto esta opcion que pusiste el 19 de Julio muchas veces y he
tratado de ponerla en practica. Me queda claro que es una funcion
personalizada :P, pero siempre me produce error, y pues ahora que tengo
tiempo quisiera saber porque:

Seguramente algo hago mal, he pegado codigo de este foro, sin embargo, no se
porque se produce el error de compilacion, la linea en que me aparece el
error es en:

Public Function Numero2Letra(ByVal strNum As String, Optional ByVal vLo,
Optional ByVal vMoneda, Optional ByVal vCentimos) As String

Si me pudieras ayudar a enterder, te lo agradeceria...

Gracias

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
27/07/2005 - 22:17 | Informe spam
hola, Oscar !

Hola Hector Barajas:
... esta opcion... queda claro que es una funcion personalizada... ahora que tengo tiempo quisiera saber porque:
... se produce el error de compilacion, la linea en que me aparece el error es en:
Public Function Numero2Letra(ByVal strNum As String, Optional ByVal vLo,
Optional ByVal vMoneda, Optional ByVal vCentimos) As String



si no te 'incomoda' que no sea Hector Barajas... [tambien me llamo Hector] :))
[probablemente] el error se deba a que al copiar 'en directo' del mensaja al modulo de codigo...
[casi con seguridad] algunas lineas 'se cortan' [en el mensaje] y 'pasan con error' [al modulo de codigo]
prueba modificando/copiando la linea 'original' [en el mensaje de donde copiaste]... a algo +/- como lo siguiente:
==Public Function Numero2Letra(ByVal strNum As String, Optional ByVal vLo, _
Optional ByVal vMoneda, Optional ByVal vCentimos) As String
==es probable que existan mas lineas 'cortadas' :-(
por cierto...la que estas usando, que es la 'mas famosa' [la de 'el Guille'] la encuentras 'en original' en:
http://www.elguille.info/vb/utilida...m2Text.htm el archivo se descarga en:
http://downloads.elguille.info/Baja...m2Text.zip
una mas de las 'famosas' la encuentras en...
http://www.sistemaslym.net/vba/exce...etras.html el archivo se descarga en:
http://www.sistemaslym.net/vba/arch...letras.zip
o puedes probar con el algoritmo que expongo al final, publicado por Claudio Sepulveda ['bastante' tiempo ha]...
[aunque no estoy seguro de su autoria] es de los mas 'sencillos' y faciles de 'adaptar' que me ha tocado conocer por estos 'lares'
puedes 'personalizar' para [practicamente] CUALQUIER 'necesidad' en las primeras 12 lineas.
ya 'incluye' un argumento 'opcional' para la 'salida' del texto en mayusculas/minusculas/... :))
->solo monedas del 'genero' masculino<-... 'trabajar' con el genero femenino 'requiere quemar' [unas cuantas] mas neuronas :))
existen otros diversos algoritmos [desde 'sencillos' hasta 'complejos'] para otras tambien diversas 'necesidades'...
=>copialo en un modulo 'normal' y 'llama' a la funcion como a cualquier otra funcion de hoja de calculo<=>TEN CUIDADO con los 'saltos de linea' si copias/pegas el codigo desde la ventana del mensaje<
si cualquier duda... comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==Function EnLetras(Valor, Optional ByVal Tipo As Byte = 1) As String ' Función Principal '
If Not IsNumeric(Valor) Then
EnLetras = "¡ La referencia no es valor o... 'excede' la precisión !!!": Exit Function
End If: Dim Moneda As String, Fracs As String, Cents As Integer
If Int(Abs(Valor)) = 1 Then Moneda = " peso" Else Moneda = " pesos"
If Right(Letras(Abs(Int(Valor))), 6) = "illón " Or Right(Letras(Abs(Int(Valor))), 8) = "illones " Then Moneda = "de" & Moneda
Cents = Application.Round(Abs(Valor) - Int(Abs(Valor)), 2) * 100
If Cents = 1 Then Fracs = " centavo" Else Fracs = " centavos"
If Cents = 0 Then Fracs = "" Else Fracs = " con " & Letras(Cents) & Fracs
EnLetras = Letras(Int(Abs(Valor))) & Moneda & Fracs
If Valor < 0 Then EnLetras = "menos " & EnLetras
If Tipo = 2 Then EnLetras = UCase(EnLetras) ' TODO EN MAYUSCULAS '
If Tipo = 3 Then EnLetras = StrConv(EnLetras, vbProperCase) ' Todo Como Nombre Propio '
If Tipo = 4 Then EnLetras = UCase(Left(EnLetras, 1)) & Mid(EnLetras, 2) ' Primer letra en mayuscula SOLAMENTE '
EnLetras = "(" & EnLetras & ")"
End Function
Private Function Letras(Valor) As String ' Función Auxiliar [uso 'exclusivo' de la función 'principal'] '
Select Case Int(Valor)
Case 0: Letras = "cero"
Case 1: Letras = "un"
Case 2: Letras = "dos"
Case 3: Letras = "tres"
Case 4: Letras = "cuatro"
Case 5: Letras = "cinco"
Case 6: Letras = "seis"
Case 7: Letras = "siete"
Case 8: Letras = "ocho"
Case 9: Letras = "nueve"
Case 10: Letras = "diez"
Case 11: Letras = "once"
Case 12: Letras = "doce"
Case 13: Letras = "trece"
Case 14: Letras = "catorce"
Case 15: Letras = "quince"
Case Is < 20: Letras = "dieci" & Letras(Valor - 10)
Case 20: Letras = "veinte"
Case Is < 30: Letras = "veinti" & Letras(Valor - 20)
Case 30: Letras = "treinta"
Case 40: Letras = "cuarenta"
Case 50: Letras = "cincuenta"
Case 60: Letras = "sesenta"
Case 70: Letras = "setenta"
Case 80: Letras = "ochenta"
Case 90: Letras = "noventa"
Case Is < 100: Letras = Letras(Int(Valor \ 10) * 10) & " y " & Letras(Valor Mod 10)
Case 100: Letras = "cien"
Case Is < 200: Letras = "ciento " & Letras(Valor - 100)
Case 200, 300, 400, 600, 800: Letras = Letras(Int(Valor \ 100)) & "cientos"
Case 500: Letras = "quinientos"
Case 700: Letras = "setecientos"
Case 900: Letras = "novecientos"
Case Is < 1000: Letras = Letras(Int(Valor \ 100) * 100) & " " & Letras(Valor Mod 100)
Case 1000: Letras = "mil"
Case Is < 2000: Letras = "mil " & Letras(Valor Mod 1000)
Case Is < 1000000: Letras = Letras(Int(Valor \ 1000)) & " mil"
If Valor Mod 1000 Then Letras = Letras & " " & Letras(Valor Mod 1000)
Case 1000000: Letras = "un millón "
Case Is < 2000000: Letras = "un millón " & Letras(Valor Mod 1000000)
Case Is < 1000000000000#: Letras = Letras(Int(Valor / 1000000)) & " millones "
If (Valor - Int(Valor / 1000000) * 1000000) _
Then Letras = Letras & Letras(Valor - Int(Valor / 1000000) * 1000000)
Case 1000000000000#: Letras = "un billón "
Case Is < 2000000000000#
Letras = "un billón " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
Case Else: Letras = Letras(Int(Valor / 1000000000000#)) & " billones "
If (Valor - Int(Valor / 1000000000000#) * 1000000000000#) _
Then Letras = Letras & " " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
End Select
End Function
Respuesta Responder a este mensaje
#2 Héctor Miguel
27/07/2005 - 23:18 | Informe spam
hola, 'tocayo' ! [perdon por los comentarios 'fuera de topico'] :D

hector barajas escribio en el mensaje ...
Te envio un archivo con la funcion que te mande ya implementada [...]

Oscar escribio en el mensaje ...
Hola Hector Barajas:
... he visto esta opcion que pusiste el 19 de Julio muchas veces y [...]





no se si 'notaste' la direccion de Oscar [la que aparece en el mensaje] ?
1) esta consultando al grupo desde una interfase web de los grupos de noticias ;)
2) en esa interfase... los archivos adjuntos... NO 'pasan' [tampoco los mensajes en HTML] :))
3) a menos que se lo envies 'directo' a su correo [si se solicita/proporciona]...
... no veo 'como' lo vaya a 'rescatar' :(

saludos,
hector.
Respuesta Responder a este mensaje
#3 Oscar
28/07/2005 - 15:13 | Informe spam
Gracias Héctor Miguel

De hecho, si ajuste las lineas del codigo, pero luego me saco otros
errores...curiosamente pegue el que tenias tu en el excel y boala, funciono
sin mayor problema Te agradezco mucho por las observaciones :))

- Para Hector Barajas

Solo para no quedarme con la espinita, de que estaba haciendo mal, es decir,
aprender de mis errores, mi correo para el archivo que me indicas, es
, solo quita NOSPAM

Gracias de antemano, por el archivo

"Héctor Miguel" escribió:

hola, 'tocayo' ! [perdon por los comentarios 'fuera de topico'] :D

> hector barajas escribio en el mensaje ...
> Te envio un archivo con la funcion que te mande ya implementada [...]

>> Oscar escribio en el mensaje ...
>> Hola Hector Barajas:
>> ... he visto esta opcion que pusiste el 19 de Julio muchas veces y [...]

no se si 'notaste' la direccion de Oscar [la que aparece en el mensaje] ?
1) esta consultando al grupo desde una interfase web de los grupos de noticias ;)
2) en esa interfase... los archivos adjuntos... NO 'pasan' [tampoco los mensajes en HTML] :))
3) a menos que se lo envies 'directo' a su correo [si se solicita/proporciona]...
... no veo 'como' lo vaya a 'rescatar' :(

saludos,
hector.



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