¿Cómo pasar un numero a letra de un recibo en Microsoft Access?

Tengo que hacer un recibo en el que ha de aparecer el importe en numero y en letra. Lo tengo en numero pero no se como pasarlo a letra.

1 Respuesta

Respuesta
1
Aunque esta pensado para dolares americanos, se puede ajustar y modificar para usar con otras monedas.
1º Crea un modulo si no lo tienes ya y pega la siguiente función:
Option Compare Database 'Use database order for string comparisons
Option Explicit 'Require explicit variable declaration
'This routine (c) 1994 Alan Simpson author of Understanding Access 2.0 by Sybex
'Variables used in NumWord() procedure defined here in Declarations.
Dim EngNum(90) As String
Dim StringNum As String, Chunk As String, English As String
Dim Hundreds As Integer, Tens As Integer, Ones As Integer
Dim LoopCount As Integer, StartVal As Integer
Dim TensDone As Integer
Dim Pennies As String
Static Function NumWord(ByVal AmountPassed As Currency) As String
'** Convert a number to words for filling in the Amount of a check
'** Example: NumWord(120.45) returns ONE HUNDRED TWENTY AND 45/100
'** Can handle numbers from 0 to $999,999.99
'** Created by Alan Simpson: Fax (619)756-0159
'** First working version, not yet fully tuned for speed or brevity.
'** The array below, and other variables, are dimensioned
'** in the Declarations section.
'** Fill EngNum array, if it's not filled already)
If Not EngNum(1) = "One" Then
EngNum(0) = ""
EngNum(1) = "One"
EngNum(2) = "Two"
EngNum(3) = "Three"
EngNum(4) = "Four"
EngNum(5) = "Five"
EngNum(6) = "Six"
EngNum(7) = "Seven"
EngNum(8) = "Eight"
EngNum(9) = "Nine"
EngNum(10) = "Ten"
EngNum(11) = "Eleven"
EngNum(12) = "Twelve"
EngNum(13) = "Thirteen"
EngNum(14) = "Fourteen"
EngNum(15) = "Fifteen"
EngNum(16) = "Sixteen"
EngNum(17) = "Seventeen"
EngNum(18) = "Eighteen"
EngNum(19) = "Nineteen"
EngNum(20) = "Twenty"
EngNum(30) = "Thirty"
EngNum(40) = "Forty"
EngNum(50) = "Fifty"
EngNum(60) = "Sixty"
EngNum(70) = "Seventy"
EngNum(80) = "Eighty"
EngNum(90) = "Ninety"
End If
'** Convert incoming Currency value to a string for parsing.
StringNum = Format$(AmountPassed, "000000.00")
'** Initialize other variables
English = ""
LoopCount = 1
StartVal = 1
Pennies = Mid$(StringNum, 8, 2)
'** Just in case the check is for less than a buck...
If AmountPassed < 1 Then
English = "Zero"
End If
'** Now do each 3-digit section of number.
While LoopCount <= 2
Chunk = Mid$(StringNum, StartVal, 3)
Hundreds = Val(Mid$(Chunk, 1, 1))
Tens = Val(Mid$(Chunk, 2, 2))
Ones = Val(Mid$(Chunk, 3, 1))
'** Do the hundreds portion of 3-digit number
If Val(Chunk) > 99 Then
English = English & EngNum(Hundreds) & " Hundred "
End If
'** Do the tens & ones portion of 3-digit number
TensDone = False
'** Is it less than 10?
If Tens < 10 Then
English = English & " " & EngNum(Ones)
TensDone = True
End If
'** Is it a teen?
If (Tens >= 11 And Tens <= 19) Then
English = English & EngNum(Tens)
TensDone = True
End If
'** Is it Evenly Divisible by 10?
If (Tens / 10#) = Int(Tens / 10#) Then
English = English & EngNum(Tens)
TensDone = True
End If
'** Or is it none of the above?
If Not TensDo
Hola!
Ante todo muchas gracias por contestar tan rapido a mi duda.
Mi problema es que soy novata en esto del Access y no tengo muy claro como hacerlo.
He creado un modulo y le he pegado la funcion que me mandaste pero no se como ejecutarla y que el valor resultante salga en un cuadro de texto por ejemplo. Si puedieses ayudarme de nuevo te estare eternamente agradecida.
Muchas gracias.
Un saludo.
ISA.
Para usar usar la Static Function NumWord(ByVal AmountPassed As Currency) As String que tenemos en el módulo, prueba lo siguiente:
1º Un formulario basado en una tabla donde tengamos un campo de tipo moneda llamado por ejemplo Amount.
2º Un cuadro de texto independiente con Origen del control =NumWord([Amount])
puedes poner el control como Activado No Bloqueado Si para no enviar alli el enfoque.
Nota: estoy viendo que falta parte de la función, asi que te la vuelvo a poner
Option Compare Database 'Use database order for string comparisons
Option Explicit 'Require explicit variable declaration
'This routine (c) 1994 Alan Simpson author of Understanding Access 2.0 by Sybex
'Variables used in NumWord() procedure defined here in Declarations.
Dim EngNum(90) As String
Dim StringNum As String, Chunk As String, English As String
Dim Hundreds As Integer, Tens As Integer, Ones As Integer
Dim LoopCount As Integer, StartVal As Integer
Dim TensDone As Integer
Dim Pennies As String
Static Function NumWord(ByVal AmountPassed As Currency) As String
'** Convert a number to words for filling in the Amount of a check
'** Example: NumWord(120.45) returns ONE HUNDRED TWENTY AND 45/100
'** Can handle numbers from 0 to $999,999.99
'** Created by Alan Simpson: Fax (619)756-0159
'** First working version, not yet fully tuned for speed or brevity.
'** The array below, and other variables, are dimensioned
'** in the Declarations section.
'** Fill EngNum array, if it's not filled already)
If Not EngNum(1) = "One" Then
EngNum(0) = ""
EngNum(1) = "One"
EngNum(2) = "Two"
EngNum(3) = "Three"
EngNum(4) = "Four"
EngNum(5) = "Five"
EngNum(6) = "Six"
EngNum(7) = "Seven"
EngNum(8) = "Eight"
EngNum(9) = "Nine"
EngNum(10) = "Ten"
EngNum(11) = "Eleven"
EngNum(12) = "Twelve"
EngNum(13) = "Thirteen"
EngNum(14) = "Fourteen"
EngNum(15) = "Fifteen"
EngNum(16) = "Sixteen"
EngNum(17) = "Seventeen"
EngNum(18) = "Eighteen"
EngNum(19) = "Nineteen"
EngNum(20) = "Twenty"
EngNum(30) = "Thirty"
EngNum(40) = "Forty"
EngNum(50) = "Fifty"
EngNum(60) = "Sixty"
EngNum(70) = "Seventy"
EngNum(80) = "Eighty"
EngNum(90) = "Ninety"
End If
'** Convert incoming Currency value to a string for parsing.
StringNum = Format$(AmountPassed, "000000.00")
'** Initialize other variables
English = ""
LoopCount = 1
StartVal = 1
Pennies = Mid$(StringNum, 8, 2)
'** Just in case the check is for less than a buck...
If AmountPassed < 1 Then
English = "Zero"
End If
'** Now do each 3-digit section of number.
While LoopCount <= 2
Chunk = Mid$(StringNum, StartVal, 3)
Hundreds = Val(Mid$(Chunk, 1, 1))
Tens = Val(Mid$(Chunk, 2, 2))
Ones = Val(Mid$(Chunk, 3, 1))
'** Do the hundreds portion of 3-digit number
If Val(Chunk) > 99 Then
English = English & EngNum(Hundreds) & " Hundred "
End If
'** Do the tens & ones portion of 3-digit number
TensDone = False
'** Is it less than 10?
If Tens < 10 Then
English = English & " " & EngNum(Ones)
TensDone = True
End If
'** Is it a teen?
If (Tens >= 11 And Tens <= 19) Then
English = English & EngNum(Tens)
TensDone = True
End If
'** Is it Evenly Divisible by 10?
If (Tens / 10#) = Int(Tens / 10#) Then
English = English & EngNum(Tens)
TensDone = True
End If
'** Or is it none of the above?
If Not TensDone Then
English = English & EngNum((Int(Tens / 10)) * 10)
English = English & " " & EngNum(Ones)
End If
'** Add the word "thousand" if necessary.
If AmountPassed > 999.99 And LoopCount = 1 Then
English = English + " Thousand "
End If
'** Do pass through second three digits
LoopCount = LoopCount + 1
StartVal = 4
Wend
'** Done: Return english with pennies tacked on.
NumWord = Trim(English) & " and " & Pennies & "/100"
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas