Gracias
Ana
Lo que tu necesitas es un trozo de código para "traducir un número" en su
correspondiente texto según la moneda legal en curso, "recuerda que dentro de
poco está el euro" y todo cambia.
Y para esto no he tenido la necesidad y la verdad no me he parado a ver como
tratarlo. Si tengo un rato lo probaré.
Saludos y suerte.
-----Mensaje original-----
Gracias
Ana
.
Option Compare Database
Option Explicit
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 msg, ErrorTrapping As String
Dim Pennies As String
'---------------------------------------------------------------------------
-
'No la he probado con número negativos, porque la utilizo para cheques y
'ajustes pero debe funcionar
Static Function NumWordEsp(ByVal AmountPassed As Currency) As String
'** Convertir Cantidad Numérica en letras
'** Ejemplo: NumWordEsp(120.45) Devuelve Ciento Veinte con 45/100
'** Maneja Cantidades desde 0 hasta $999,999,999.99
'** El siguiente arreglo y demas variables estan dimensionadas
'** y declaradas mas arriba If ErrorTrapping Then
On Error GoTo NumWord_Err
Dim msg As String
'** Llenar el arreglo engnum, si no está lleno
If Not EngNum(1) = "Un" Then
EngNum(0) = ""
EngNum(1) = "Un"
EngNum(2) = "Dos"
EngNum(3) = "Tres"
EngNum(4) = "Cuatro"
EngNum(5) = "Cinco"
EngNum(6) = "Seis"
EngNum(7) = "Siete"
EngNum(8) = "Ocho"
EngNum(9) = "Nueve"
EngNum(10) = "Diez"
EngNum(11) = "Once"
EngNum(12) = "Doce"
EngNum(13) = "Trece"
EngNum(14) = "Catorce"
EngNum(15) = "Quince"
EngNum(16) = "Dieciseis"
EngNum(17) = "Diecisiete"
EngNum(18) = "Dieciocho"
EngNum(19) = "Diecinueve"
EngNum(20) = "Veinte"
EngNum(30) = "Treinta"
EngNum(40) = " Cuarenta"
EngNum(50) = " Cincuenta"
EngNum(60) = "Sesenta"
EngNum(70) = "Setenta"
EngNum(80) = "Ochenta"
EngNum(90) = "Noventa"
End If
StringNum = Format$(AmountPassed, "000000000.00")
'** Inicializando otras variables
English = ""
LoopCount = 1
StartVal = 1
Pennies = Mid$(StringNum, 11, 2)
'** Solo en caso de que sea menos que uno
If AmountPassed < 1 Then
English = "Cero"
End If
For LoopCount = 1 To 3
Chunk = Mid$(StringNum, StartVal, 3)
Hundreds = vAL(Mid$(Chunk, 1, 1))
Tens = vAL(Mid$(Chunk, 2, 2))
Ones = vAL(Mid$(Chunk, 3, 1))
If vAL(Chunk) = 100 Then
English = Trim(English & " Cien ")
End If
If vAL(Chunk) > 100 And (Chunk) < 200 Then
English = Trim(English & " Ciento ")
End If
If vAL(Chunk) > 199 And (Chunk) < 300 Then
English = Trim(English & " Doscientos ")
End If
If vAL(Chunk) > 299 And (Chunk) < 400 Then
English = Trim(English & " Trescientos ")
End If
If vAL(Chunk) > 399 And (Chunk) < 500 Then
English = Trim(English & EngNum(Hundreds)) & " Cientos "
End If
If vAL(Chunk) > 499 And (Chunk) < 600 Then
English = Trim(English & " Quinientos ")
End If
If vAL(Chunk) > 599 And (Chunk) < 700 Then
English = Trim(English & " Seiscientos ")
End If
If vAL(Chunk) > 699 And (Chunk) < 800 Then
English = Trim(English & " Setecientos ")
End If
If vAL(Chunk) > 799 And (Chunk) < 900 Then
English = Trim(English & " Ochocientos ")
End If
If vAL(Chunk) > 899 And (Chunk) < 1000 Then
English = Trim(English & " Novecientos ")
End If
TensDone = False
If Tens < 10 Then
English = Trim(English) & " " & EngNum(Ones)
TensDone = True
End If
If (Tens >= 11 And Tens <= 19) Then
English = English & " " & EngNum(Tens)
TensDone = True
End If
If (Tens / 10#) = Int(Tens / 10#) Then
English = English & " " & EngNum(Tens)
TensDone = True
End If
If Not TensDone Then
English = English & " " & EngNum((Int(Tens / 10)) * 10)
English = Trim(English) & " y " & EngNum(Ones)
End If
'** añadir la palabra "million" si es necesaria.
If LoopCount = 1 And vAL(Chunk) = 1 Then
English = Trim(English) + " Millon "
End If
If LoopCount = 1 And vAL(Chunk) > 1 Then
English = Trim(English) + " Millones "
End If
'** añadir la palabra "mil" si es necesaria.
If LoopCount = 2 And vAL(Chunk) > 0 Then
English = Trim(English) + " Mil "
End If
'** Do pass through second three digits
StartVal = StartVal + 3
Next LoopCount
'** Retornar el valores
'Si desea Emplear esta función para trabajar has con dos decimales
escriba
'el retorno de la función Así: NumWordEsp = Trim(English) & " con " &
Pennies & "/100"
'** Retorno de la función
NumWordEsp = Trim(English) & " Pesos M/Cte."
Exit Function
NumWord_Err:
MsgBox "Error es " & Error$ & Chr(13) & Chr(10) & "En NumWordEsp()" &
Chr(13) & Chr(10) & "Erro de la Función"
MsgBox msg, 16, "Error de Aplicación "
Exit Function
End Function
--
Gabriel Ortiz L.
gor...@col-online.com
"AnaMar" <ma...@ran.es> escribió en el mensaje
news:#NxS0PKV...@cppssbbsa02.microsoft.com...
Dim Numeros(103) As String
Dim letras As String
Function Centenas(VCentena As Double) As String
If VCentena = 1 Then
Centenas = Numeros(100)
Else
If VCentena = 5 Then
Centenas = Numeros(101)
Else
If VCentena = 7 Then
Centenas = letras & Numeros(102)
Else
If VCentena = 9 Then
Centenas = letras & Numeros(103)
Else
Centenas = Numeros(VCentena)
End If
End If
End If
End If
End Function
Function Unidades(VUnidad As Double) As String
Unidades = Numeros(VUnidad)
End Function
Function Decenas(VDecena As Double) As String
Decenas = Numeros(VDecena)
End Function
Sub inicializar()
Numeros(0) = "cero"
Numeros(1) = "uno"
Numeros(2) = "dos"
Numeros(3) = "tres"
Numeros(4) = "cuatro"
Numeros(5) = "cinco"
Numeros(6) = "seis"
Numeros(7) = "siete"
Numeros(8) = "ocho"
Numeros(9) = "nueve"
Numeros(10) = "diez"
Numeros(11) = "once"
Numeros(12) = "doce"
Numeros(13) = "trece"
Numeros(14) = "catorce"
Numeros(15) = "quince"
Numeros(20) = "veinte"
Numeros(30) = "treinta"
Numeros(40) = "cuarenta"
Numeros(50) = "cincuenta"
Numeros(60) = "sesenta"
Numeros(70) = "setenta"
Numeros(80) = "ochenta"
Numeros(90) = "noventa"
Numeros(100) = "ciento"
Numeros(101) = "quinientos"
Numeros(102) = "setecientos"
Numeros(103) = "novecientos"
End Sub
Function NumerosALetras(Numero As Double) As String
Dim HuboCentavos As Boolean
Dim Decimales As Double
Decimales = Numero - Int(Numero)
Numero = Int(Numero)
inicializar
letras = ""
Do
'*---> Validación si se pasa de 100 millones
If Numero >= 1000000000 Then
letras = "Error en Conversión a Letras"
Numero = 0
Decimales = 0
End If
'*---> Centenas de Millón
If (Numero < 1000000000) And (Numero >= 100000000) Then
If (Int(Numero / 100000000) = 1) And ((Numero - (Int(Numero /
100000000) * 100000000)) < 1000000) Then
letras = letras & "cien millones "
Else
letras = letras & Centenas(Int(Numero / 100000000))
If (Int(Numero / 100000000) <> 1) And (Int(Numero / 100000000) <>
5) And (Int(Numero / 100000000) <> 7) And (Int(Numero / 100000000) <> 9)
Then
letras = letras & "cientos "
Else
letras = letras & " "
End If
End If
Numero = Numero - (Int(Numero / 100000000) * 100000000)
End If
'*---> Decenas de Millón
If (Numero < 100000000) And (Numero >= 10000000) Then
If Int(Numero / 1000000) < 16 Then
letras = letras & Decenas(Int(Numero / 1000000))
letras = letras & " millones "
Numero = Numero - (Int(Numero / 1000000) * 1000000)
Else
letras = letras & Decenas(Int(Numero / 10000000) * 10)
Numero = Numero - (Int(Numero / 10000000) * 10000000)
If Numero > 1000000 Then
letras = letras & " y "
End If
End If
End If
'*---> Unidades de Millón
If (Numero < 10000000) And (Numero >= 1000000) Then
If Int(Numero / 1000000) = 1 Then
letras = letras & " un millón "
Else
letras = letras & Unidades(Int(Numero / 1000000))
letras = letras & " millones "
End If
Numero = Numero - (Int(Numero / 1000000) * 1000000)
End If
'*---> Centenas de Millar
If (Numero < 1000000) And (Numero >= 100000) Then
If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) *
100000)) < 1000) Then
letras = letras & "cien mil "
Else
letras = letras & Centenas(Int(Numero / 100000))
If (Int(Numero / 100000) <> 1) And (Int(Numero / 100000) <> 5) And
(Int(Numero / 100000) <> 7) And (Int(Numero / 100000) <> 9) Then
letras = letras & "cientos "
Else
letras = letras & " "
End If
End If
Numero = Numero - (Int(Numero / 100000) * 100000)
End If
'*---> Decenas de Millar
If (Numero < 100000) And (Numero >= 10000) Then
If Int(Numero / 1000) < 16 Then
letras = letras & Decenas(Int(Numero / 1000))
letras = letras & " mil "
Numero = Numero - (Int(Numero / 1000) * 1000)
Else
letras = letras & Decenas(Int(Numero / 10000) * 10)
Numero = Numero - (Int((Numero / 10000)) * 10000)
If Numero > 1000 Then
letras = letras & " y "
Else
letras = letras & " mil "
End If
End If
End If
'*---> Unidades de Millar
If (Numero < 10000) And (Numero >= 1000) Then
If Int(Numero / 1000) = 1 Then
letras = letras & "un"
Else
letras = letras & Unidades(Int(Numero / 1000))
End If
letras = letras & " mil "
Numero = Numero - (Int(Numero / 1000) * 1000)
End If
'*---> Centenas
If (Numero < 1000) And (Numero > 99) Then
If (Int(Numero / 100) = 1) And ((Numero - (Int(Numero / 100) * 100)) <
1) Then
letras = letras & "cien "
Else
letras = letras & Centenas(Int(Numero / 100))
If (Int(Numero / 100) <> 1) And (Int(Numero / 100) <> 5) And
(Int(Numero / 100) <> 7) And (Int(Numero / 100) <> 9) Then
letras = letras & "cientos "
Else
letras = letras & " "
End If
End If
Numero = Numero - (Int(Numero / 100) * 100)
End If
'*---> Decenas
If (Numero < 100) And (Numero > 9) Then
If Numero < 16 Then
letras = letras & Decenas(Int(Numero))
Numero = Numero - Int(Numero)
Else
letras = letras & Decenas(Int((Numero / 10)) * 10)
Numero = Numero - (Int((Numero / 10)) * 10)
If Numero > 0.99 Then
letras = letras & " y "
End If
End If
End If
'*---> Unidades
If (Numero < 10) And (Numero > 0.99) Then
letras = letras & Unidades(Int(Numero))
Numero = Numero - Int(Numero)
End If
Loop Until (Numero = 0)
'*---> Decimales
If (Decimales > 0) Then
letras = letras & " con "
letras = letras & Format(Decimales * 100, "00") & "/100"
Else
' If (letras <> "Error en Conversión a Letras") And (Len(Trim(letras)) >
0) Then
' Select Case Valor1
' Case True
' letras = letras & " exactos"
' End Select
' End If
End If
NumerosALetras = letras
'Select Case Valor2
'Case True
'NumerosALetras = UCase(Left(letras, 1)) & Right(letras, Len(letras) - 1)
'End Select
End Function
Para probarlo, en un formulario puedes poner dos cuadros de texto uno en el
que se ingresa
el número (por ejemplo, llamdo Numero) y otro en el que aparecerá el
texto(por ej. llamado Letras) entonces la función se usa así:
[Letras]= NumerosALetras(Numero)
--
Saludos.
José A.Giménez.
Asunción, Paraguay
--
Jorge E Jaramillo
king...@hotmail.com
Apúntate ésta página, seguro que la vas a consultar más de una vez
http://www.abarcode.net/tomasb/access.htm
AnaMar <ma...@ran.es> escribió en el mensaje de noticias