¿Cómo convertir números a letras en access 2003?

Respuesta de
a
Usuario
¿Cómo se debe hacer para convertir importes de números a letras para luego imprimirlos en un recibo?
Avatar
Experto
¿No te imprime los números?
Usuario
Si, perfectamente. Pero lo que busco es transformar en letras esos importes. Por lo que he visto es a través de un código. Lo cierto es que, si esto es así, no se como crearlo. Esto se debe a que no tengo mucho conocimiento. Espero tu respuesta.
Avatar
Experto
Es decir que si tienes un numero 24, ¿te ponga la letra "A"?
Usuario
No, si el importe es "24,51" busco que en el recibo diga "veinticuatro con cincuenta y un centavos" o en su defecto "veinticuatro con 51/100". Este proceso debería ser automático pero no se como hacerlo. Espero tu respuesta
Avatar
Experto
Se necesitaria un codigo VB para hacerlo.
Me puedes decir el nombre de la textbox que contiene el formato numero, ¿y el nombre de la textbox donde hay que almacenar el formato texto?
Usuario
En realidad no se que es textbox, yo hago un calculo matemático a través de las consultas y ese resultado (numérico) quiero expresarlo en letras también. De manera que en el informe se vea reflejado la expresión alfabética del resultado numérico.
Estoy utilizando la base de access 2003 con sus tablas, formulario, consultas, consultas de acción de creación de tablas e informes. Espero tu respuesta
Avatar
Experto
Bien,
Pues en el formulario que usas sobre la consulta o tabla donde tienes ese campo numérico, si vas a diseño, en propiedades del recuadro donde aparecen los datos (textbox), hay un apartado que pone "nombre"
Pues eso te pido. El nombre del recuadro numérico y el nombre del recuadro donde quieres guardar el valor en texto
Usuario
Creo que entendí: fui al formulario, luego a vista diseño y luego propiedades. El nombre del recuadro numérico es "TOTAL" y donde quiero el valor en texto es "texto22". Espero tu respuesta.
Avatar
Experto
Bien,
Primero de todo decir que me lo he pasado genial haciendo el código. Muchas gracias.
Lo he hecho para números hasta 9999,99, si deseas más me lo dices que programo más.
Debes cambiar el nombre del texto destino de "texto22" a "Texto" a secas.
En el procedimiento del evento "al perder enfoque" de TOTAL, generale un código y ponle lo siguiente.
Dim mil, cen, dec, un, udec, ucen As Integer
Dim total As Double
Texto.Value = ""
mil = 0
cen = 0
dec = 0
un = 0
udec = 0
ucen = 0
total = Numero.Value
Do Until total < 1000
    mil = mil + 1
    total = total - 1000
Loop
Do Until total < 100
    cen = cen + 1
    total = total - 100
Loop
Do Until total < 10
    dec = dec + 1
    total = total - 10
Loop
Do Until total < 1
    un = un + 1
    total = total - 1
Loop
Do Until total < 0.1
    udec = udec + 1
    total = total - 0.1
Loop
Do Until total < 0.009
    ucen = ucen + 1
    total = total - 0.01
Loop
If mil > 1 Then
    nombreunidad (mil)
End If
If mil > 0 Then
    Texto = Texto & " mil"
End If
If cen > 1 Then
    If cen = 5 Then
        Texto = Texto & " quinientos"
    Else
        Texto = Texto & " "
        If cen = 7 Or cen = 9 Then
            nombreunidad (cen * 100)
        Else
            nombreunidad (cen)
        End If
        Texto = Texto & "cientos"
    End If
Else
    If cen = 1 Then
        If dec > 0 Or un > 0 Then
            Texto = Texto & " ciento"
        Else
            Texto = Texto & " cien"
        End If
    End If
End If
If dec > 0 Then
    total = dec * 10 + un
    nombredecena (total)
Else
    If un > 0 Then
        Texto = Texto & " "
        nombreunidad (un)
    End If
End If
If udec > 0 Or ucen > 0 Then
    Texto = Texto & " con"
    If udec > 0 Then
        total = udec * 10 + ucen
        nombredecena (total)
    Else
        If ucen > 0 Then
            nombreunidad (ucen)
        End If
    End If
End If
------------------------------------------------------------------------------------------
Y después debajo de "Option Compare Database" y encima del "Private Sub" le pegas las funciones siguientes.
Sub nombreunidad(num As Integer)
Select Case num
    Case 1
        Texto = Texto & "uno"
    Case 2
        Texto = Texto & "dos"
    Case 3
        Texto = Texto & "tres"
    Case 4
        Texto = Texto & "cuatro"
    Case 5
        Texto = Texto & "cinco"
    Case 6
        Texto = Texto & "seis"
    Case 7
        Texto = Texto & "siete"
    Case 8
        Texto = Texto & "ocho"
    Case 9
        Texto = Texto & "nueve"
    Case 700
        Texto = Texto & "sete"
    Case 900
        Texto = Texto & "nove"
End Select
End Sub
Sub nombredecena(num As Integer)
Dim dec, un
dec = 0
un = 0
Do Until num < 10
    dec = dec + 1
    num = num - 10
Loop
Do Until num < 1
    un = un + 1
    num = num - 1
Loop
Select Case dec
    Case 1
        Select Case un
            Case 0
                Texto = Texto & " diez"
            Case 1
                Texto = Texto & " once"
            Case 2
                Texto = Texto & " doce"
            Case 3
                Texto = Texto & " trece"
            Case 4
                Texto = Texto & " catorce"
            Case 5
                Texto = Texto & " quince"
            Case 6
                Texto = Texto & " dieciseis"
            Case 7
                Texto = Texto & " diecisiete"
            Case 8
                Texto = Texto & " dieciocho"
            Case 9
                Texto = Texto & " diecinueve"
        End Select
    Case 2
        Texto = Texto & " veint"
        If un = 0 Then
            Texto = Texto & "e"
        Else
            Texto = Texto & "i"
        End If
    Case 3
        Texto = Texto & " treinta"
    Case 4
        Texto = Texto & " cuarenta"
    Case 5
        Texto = Texto & " cincuenta"
    Case 6
        Texto = Texto & " sesenta"
    Case 7
        Texto = Texto & " setenta"
    Case 8
        Texto = Texto & " ochenta"
    Case 9
        Texto = Texto & " noventa"
End Select
If dec > 2 And un > 0 Then
    Texto = Texto & " y "
End If
If dec > 1 And un > 0 Then
    nombreunidad (un)
End If
End Sub
Avatar
Experto
Ah, perdona, tienes que cambiar el nombre del textbox "TOTAL" por "Numero"
Usuario
Impresionante, fabuloso. Lo resumo en dos palabras: Espec Tacular. Pero necesito más números porque tengo recibos de cinco cifras. Es decir 52.572,30 por ejemplo. Lo probé y fue sensacional. Ahora espero me des la ultima mano agregando las cifras que me faltan. Desde ya muchísimas gracias. Sos un genio
Avatar
Experto
Dime el valor máximo por favor
Usuario
El valor máximo es 99.999,99.
Avatar
Experto
Bien,
Sustituye el código de "al perder enfoque" de lo que tengas por:
Dim dmil, mil, cen, dec, un, udec, ucen As Integer
Dim total As Double
Texto.Value = ""
dmil = 0
mil = 0
cen = 0
dec = 0
un = 0
udec = 0
ucen = 0
total = Numero.Value
Do Until total < 10000
    dmil = dmil + 1
    total = total - 10000
Loop
Do Until total < 1000
    mil = mil + 1
    total = total - 1000
Loop
Do Until total < 100
    cen = cen + 1
    total = total - 100
Loop
Do Until total < 10
    dec = dec + 1
    total = total - 10
Loop
Do Until total < 1
    un = un + 1
    total = total - 1
Loop
Do Until total < 0.1
    udec = udec + 1
    total = total - 0.1
Loop
Do Until total < 0.009
    ucen = ucen + 1
    total = total - 0.01
Loop
If dmil > 0 Then
    total = dmil * 10 + mil
    nombredecena (total)
    If mil = 1 Then
        Texto = Left(Texto, Len(Texto) - 1)
    End If
Else
    If mil > 1 Then
        nombreunidad (mil)
    End If
End If
If mil > 0 Or dmil > 0 Then
    Texto = Texto & " mil"
End If
If cen > 1 Then
    If cen = 5 Then
        Texto = Texto & " quinientos"
    Else
        Texto = Texto & " "
        If cen = 7 Or cen = 9 Then
            nombreunidad (cen * 100)
        Else
            nombreunidad (cen)
        End If
        Texto = Texto & "cientos"
    End If
Else
    If cen = 1 Then
        If dec > 0 Or un > 0 Then
            Texto = Texto & " ciento"
        Else
            Texto = Texto & " cien"
        End If
    End If
End If
If dec > 0 Then
    total = dec * 10 + un
    nombredecena (total)
Else
    If un > 0 Then
        Texto = Texto & " "
        nombreunidad (un)
    End If
End If
If udec > 0 Or ucen > 0 Then
    Texto = Texto & " con"
    If udec > 0 Then
        total = udec * 10 + ucen
        nombredecena (total)
    Else
        If ucen > 0 Then
            nombreunidad (ucen)
        End If
    End If
End If
Usuario
Perfecto, anda perfecto. Te agradezco muchísimo.
Avatar
Experto
De nada, finaliza la pregunta cuando puedas y no dudes en preguntarme de nuevo si te salen más dudas