Problema con Macro para Convertir Numero a Letras

0
Buena tarde a todos, espero que alguien me pueda ayudar con esto, aca encontre una macro para la formula =ValorEnLetras que desarrollo el señor Hector Miguel Orosco para 5 idiomas; yo uso el idioma por omision que es el Español, pero tenia un pequeño problema, a momento de escribir un valor numerico ejem. 2.02 la funcion me devuelve DOS CON DOS, yo lo corregi porqeue kiero que me indique en letras el punto y el cero que se encuenta en los decimales, y ahora me devuelve DOS PUNTO CERO DOS, ya lo hice con todos los decimales del .01 al .09, pero el .07 me sigue dando problema, este numero tiene algo de especial??



http://www.officefull.es/todo-informatica/84-convertir-nos-a-su-equivalente-en-letras.html
       
  • Replied by Super User on Jueves, Febrero 02 2012, 01:02 PM · Hide · #1
    Hola Manuel :D!!

    Pues no se porque sucede esto :( , en un principio veo que estas utilizando el separador decimal como punto, y no se como hiciste la correccion para realizar las pruebas. Si quieres puedes decirnos como lo realizaste y asi vemos que puede suceder con el .07 ¿vales? :o

    Ya nos comentas y saludos!!
    Monica
  •  
  • Replied by Manuel Custodio on Jueves, Febrero 02 2012, 02:23 PM · Hide · #2
    Hola Monica, te agradesco por tomarte el tiempo de responderme, bueno te comento:

    Primero en la linea 191 del codigo modifique el .01, luego en la linea 237 agregue los otros decimales .00 - .02 al .09, y el separador decimal en la linea 282.

    Te adjunto el Archivo donde lo estoy trabajando, de nuevo te agradesco y espero tu respuesta.

    Saludos
  •  
  • Replied by Manuel Custodio on Jueves, Febrero 02 2012, 03:06 PM · Hide · #3
    no veo el archivo adjunto mejor te pongo aca lo que hice,
    Linea 191 :
    ' A continuación, *preparamos" si el identificador para decimales "01" -en letras- es UNA ó UN(O) '
    If FraccionesEnLetra And ID_Fracciones <> "" And Right(ID_Fracciones, 1) <> "." Then
    If Left(ID_Fracciones, 4) = "Ning" Or Left(ID_Fracciones, 5) = "Sinid" Then
    Solitario = "Cero Uno"
    Else
    If Right(ID_Fracciones, 2) = "as" Then Solitario = "Una" Else Solitario = "Un"
    End If

    Linea 237 y de ultimo esta la linea 282:
    ' Aquí *singularizamos* para Español '
    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 = 2 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Dos"
    End If
    ElseIf Decimales = 3 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Tres"
    End If
    ElseIf Decimales = 4 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Cuatro"
    End If
    ElseIf Decimales = 5 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Cinco"
    End If
    ElseIf Decimales = 6 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Seis"
    End If
    ElseIf Decimales = 7 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Siete"
    End If
    ElseIf Decimales = 8 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Ocho"
    End If
    ElseIf Decimales = 9 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Nueve"
    End If

    ' Aquí *preparamos* las letras para decimales "00" '
    ElseIf Decimales = 0 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Cero"
    LetraFracciones_US = "Zero"
    LetraFracciones_FR = "Zéro"
    LetraFracciones_IT = "Zero"
    LetraFracciones_CA = "Cero"
    End If
    End If
    End If
    End If
    Pre_Frac = " punto "
  •  
  • Replied by Super User on Jueves, Febrero 02 2012, 10:56 PM · Hide · #4
    appss tienes razon :S se ve que el siete no lo reconoce como cero siete :S , en cualguier variedad tanto el 0,07 tanto el 1,07 etc...
    Pues voy a mirar de que puede ser y entre mañana y pasado te comento alguna conclusion vales??

    gracias manuel y saludos!!
    Monica
  •  
  • Replied by Manuel Custodio on Viernes, Febrero 03 2012, 02:22 PM · Hide · #5
    no pues gracias a vos que te tomas la molestia de ayudarme :D... esperare con ansia tu respuesta


    saludoss
  •  
  • Replied by Super User on Sábado, Febrero 04 2012, 09:51 PM · Hide · #6
    Holas manuel :) !!

    Pues creo que ya se porque sucede y es por el tema decimal que cuando hace las pasadas con el siete la evalua como verdadera pero pasa de largo....creo que es por los decimales y el redondeo ya que me devuelve por ejemplo 0,07000000000005 e incluso me ha devuelto 6,99999999999932E-02 y apufff !!!

    Bien mira de añadir lo siguiente para el 7 ->>>

    '....

    ElseIf Decimales = 6 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Seis"
    End If
    ElseIf Round(Decimales, 2) = 7 Then
    If FraccionesEnLetra Then
    LetraFracciones = "cero siete"
    End If
    ElseIf Decimales = 8 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Ocho"
    End If

    '..........

    No he terminado de hacer todas las pruebas oportunas por falta de tiempo :( haz tus pruebas y si cualquier cosa nos comentas valess???

    Gracias manuel y saludos,
    Monica
  •  
  • Replied by Manuel Custodio on Lunes, Febrero 06 2012, 08:44 PM · Hide · #7
    te agradesco mucho Monica... funciona muy bien, ahora tengo otro problema jeje ahora el valor Solitario cuando se topa con un 01 me esta molestando
    si coloco 0.21 = CERO PUNTO VEINTICERO UNO, 0.31 = CERO PUNTO TREINTA Y CERO UNO.... etc :) sin embargo solo afecta a los decimales los numero enteros estan bien....
    esperare tu respuesta.. muchas gracias y saludos.
  •  
  • Replied by Super User on Jueves, Febrero 09 2012, 10:01 AM · Hide · #8
    holas de nuevo Manuel :p

    Pues a ver como este codigo es un tanto complejo para mi limitados conocimientos :D , vamos a hacer una formula:


    1.- Quita el Punto cero que añadiste en la linea Linea 191

    2.- Luego escribe en por ejemplo en mis pruebas sobre archivo de Hector Miguel, en la Hoja Idiomas:

    Rango L15:M24

    0 cero
    1 uno
    2 dos
    3 tres
    4 cuatro
    5 cinco
    6 seis
    7 siete
    8 ocho
    9 nueve

    3.- Celda E17 es la que llevara el valor a convertir.
    4.- Celda G17 la siguiente Formula:

    = SI(REDONDEAR(RESIDUO(E17;1);2)=0,01;BUSCAR(ENTERO(E17);$L$15:$M$24) & " punto Cero";ValorEnLetras(E17;;"ninguna";;;"Frase"))

    5.- El resto del codigo dejalo tal cual modificaste con lo que añadi:

    ....
    ElseIf Decimales = 2 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Dos"
    End If
    ElseIf Decimales = 3 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Tres"
    End If
    ElseIf Decimales = 4 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Cuatro"
    End If
    ElseIf Decimales = 5 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Cinco"
    End If
    ElseIf Decimales = 6 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Seis"
    End If
    ElseIf Round(Decimales, 2) = 7 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero sietet"
    End If
    ElseIf Decimales = 8 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Ocho"
    End If
    ElseIf Decimales = 9 Then
    If FraccionesEnLetra Then
    LetraFracciones = "Cero Nueve"
    End If
    '.........
    Pre_Frac = " punto "
    '....


    6.- Quitando la linea de Pre_Frac = " con "

    Y creo que asi ya se soluciona el tema del 01 jajaj ! CREO amos no lo se, habria que hacer pruebas aunque estoy pensando que esto se podria a ver solucionado sin necesitad de tocar o añadir codigo al del Creado Por Hector Miguel...

    Haz tus pruebas y nos comentas vales?
    Saludos!
    Monica
  •  
  • Replied by Super User on Jueves, Febrero 09 2012, 10:02 AM · Hide · #9
    ANOTACION:

    en el punto:

    1.- Quita el Punto cero que añadiste en la linea Linea 191

    Queria decir ->>

    1.- Quita el Cero uno que añadiste en la linea Linea 191

    saludos!!
  •  
  •  
    Replied by Super User on Jueves, Febrero 09 2012, 11:24 AM · Hide · #10
    Otra forma menos farragosa para arreglar el 01 mas limpia es la siguiente:

    =SI(REDONDEAR(RESIDUO(E17;1);2)=0,01;IZQUIERDA(G17;ENCONTRAR("punto";g17;1)-1) & "punto Cero Uno";ValorEnLetras(e17;;"ninguna";;;"Frase"))


    FPara hacer las pruebas con esta formula que te paso ahora tendras que crear una columna adicional para que no se creen referencias circulares y asi la formula si la parte decimal es igual a 01 entonces busca en Valor en Letras hasta la palabra Punto y añade "punto cero uno" y asi si que creo que lo tienes ya. Y si la parte decimal no es igual a 01 ya entonces pon Valor en letras.

    saludos,
    Monica
Your Response