Cifras o importe en letras

Necesito que un informe en el cual debo confeccionar un recibo me escriba el importe en letras de un importe que coloco en números.
Tengo el código que me informo un colega tuyo (ahora no disponible) pero no me explicó el procedimiento para que funcione.
Donde lo tengo que insertar, como hago para que funcione, etc

1 respuesta

Respuesta
1
Uff,
No sé como es el código pero así a simple vista se me ocurre que hay muchas maneras de realizarlo, Esto se hace con Select Case y, todo el código se inserta en un modulo.
Después desde un formulario se llama al código es decir
Call Codigo(tusnumeros)
Enseñame el código pata ver como es.
Public Function Num2Text(ByVal value As Double) As String
Select Case value
Case 0 : Num2Text = "CERO"
Case 1 : Num2Text = "UN"
Case 2 : Num2Text = "DOS"
Case 3 : Num2Text = "TRES"
Case 4 : Num2Text = "CUATRO"
Case 5 : Num2Text = "CINCO"
Case 6 : Num2Text = "SEIS"
Case 7 : Num2Text = "SIETE"
Case 8 : Num2Text = "OCHO"
Case 9 : Num2Text = "NUEVE"
Case 10 : Num2Text = "DIEZ"
Case 11 : Num2Text = "ONCE"
Case 12 : Num2Text = "DOCE"
Case 13 : Num2Text = "TRECE"
Case 14 : Num2Text = "CATORCE"
Case 15 : Num2Text = "QUINCE"
Case Is <; 20 : Num2Text = "DIECI" & Num2Text(value - 10)
Case 20 : Num2Text = "VEINTE"
Case Is <; 30 : Num2Text = "VEINTI" & Num2Text(value - 20)
Case 30 : Num2Text = "TREINTA"
Case 40 : Num2Text = "CUARENTA"
Case 50 : Num2Text = "CINCUENTA"
Case 60 : Num2Text = "SESENTA"
Case 70 : Num2Text = "SETENTA"
Case 80 : Num2Text = "OCHENTA"
Case 90 : Num2Text = "NOVENTA"
Case Is <; 100 : Num2Text = Num2Text(Int(value \ 10) * 10) & " Y " & Num2Text(value Mod 10)
Case 100 : Num2Text = "CIEN"
Case Is <; 200 : Num2Text = "CIENTO " & Num2Text(value - 100)
Case 200, 300, 400, 600, 800 : Num2Text = Num2Text(Int(value \ 100)) & "CIENTOS"
Case 500 : Num2Text = "QUINIENTOS"
Case 700 : Num2Text = "SETECIENTOS"
Case 900 : Num2Text = "NOVECIENTOS"
Case Is <; 1000 : Num2Text = Num2Text(Int(value \ 100) * 100) & " " & Num2Text(value Mod 100)
Case 1000 : Num2Text = "MIL"
Case Is <; 2000 : Num2Text = "MIL " & Num2Text(value Mod 1000)
Case Is <; 1000000 : Num2Text = Num2Text(Int(value \ 1000)) & " MIL"
If value Mod 1000 Then Num2Text = Num2Text & " " & Num2Text(value Mod 1000)
Case 1000000 : Num2Text = "UN MILLON"
Case Is <; 2000000 : Num2Text = "UN MILLON " & Num2Text(value Mod 1000000)
Case Is <; 1000000000000.0# : Num2Text = Num2Text(Int(value / 1000000)) & " MILLONES "
If (value - Int(value / 1000000) * 1000000) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000) * 1000000)
Case 1000000000000.0# : Num2Text = "UN BILLON"
Case Is <; 2000000000000.0# : Num2Text = "UN BILLON " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#)
Case Else : Num2Text = Num2Text(Int(value / 1000000000000.0#)) & " BILLONES"
If (value - Int(value / 1000000000000.0#) * 1000000000000.0#) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#)
End Select
End Function
Era esto. ¿Va en un modulo? Y ¿Luego?
Gracias
Abres un modulo y tal como te sale la página en blanco pega todo este churro.
Private Function fsTriada( _
ByVal vsNumeros As String, _
ByVal vbMasculino As Boolean _
) As String
On Local Error GoTo Err_fsTriada
Dim iLongitud As Integer 'Longitud de la triada pasada
Dim sUnidades As String
Dim sDecenas As String
Dim sCentenas As String
Dim sY As String 'Guarda el 'y ' para unir la unidades en caso de
'que sea necesario
If vsNumeros = "100" Then 'Se pone directamente para evitar que en la rutina
fsTriada = " cien" 'ponga 'ciento '
Exit Function
End If
'Se guarda en las variables sUnidades, sDecenas y sCentenas el numero que le
'corresponde a cada uno para hacer despues la conversion.
sUnidades = Right$(vsNumeros, 1)
iLongitud = Len(vsNumeros)
If iLongitud > 1 Then
sDecenas = Mid$(vsNumeros, iLongitud - 1, 1)
If sDecenas = "0" Then
sDecenas = ""
End If
If iLongitud > 2 Then
sCentenas = Left$(vsNumeros, 1)
If sCentenas = "0" Then
sCentenas = ""
End If
Else
sCentenas = ""
End If
Else
sDecenas = ""
End If
'
'Primero se trabaja con la parte de Centenas
'
Select Case sCentenas
Case "0"
sCentenas = ""
Case "1"
sCentenas = " ciento"
Case "2"
sCentenas = " doscient" & IIf(vbMasculino, "os", "as")
Case "3"
sCentenas = " trescient" & IIf(vbMasculino, "os", "as")
Case "4"
sCentenas = " cuatrocient" & IIf(vbMasculino, "os", "as")
Case "5"
sCentenas = " quinient" & IIf(vbMasculino, "os", "as")
Case "6"
sCentenas = " seiscient" & IIf(vbMasculino, "os", "as")
Case "7"
sCentenas = " setecient" & IIf(vbMasculino, "os", "as")
Case "8"
sCentenas = " ochocient" & IIf(vbMasculino, "os", "as")
Case "9"
sCentenas = " novecient" & IIf(vbMasculino, "os", "as")
End Select
'
'A continuacion con las decenas y las unidades. Se trabaja con los dos
'a la vez por los casos especiales (los numeros menores a 30)
'
Select Case sDecenas
Case "1"
Select Case sUnidades
Case "0"
sDecenas = " diez"
Case "1"
sDecenas = " once"
Case "2"
sDecenas = " doce"
Case "3"
sDecenas = " trece"
Case "4"
sDecenas = " catorce"
Case "5"
sDecenas = " quince"
Case "6"
sDecenas = " dieciseis"
Case "7"
sDecenas = " diecisiete"
Case "8"
sDecenas = " dieciocho"
Case "9"
sDecenas = " diecinueve"
End Select
sUnidades = ""
Case "2"
sDecenas = " veinti"
Select Case sUnidades
Case "0"
sDecenas = " veinte"
sUnidades = ""
Case "1"
sUnidades = "un" & IIf(vbMasculino, " ", "a ")
Case "2"
sUnidades = "dós"
Case "3"
sUnidades = "tres"
Case "4"
sUnidades = "cuatro"
Case "5"
sUnidades = "cinco"
Case "6"
sUnidades = "seis"
Case "7"
sUnidades = "siete"
Case "8"
sUnidades = "ocho"
Case "9"
sUnidades = "nueve"
End Select
Case Else 'Superior a 29 o inferior a 10
sY = " y"
Select Case sDecenas
Case "0", ""
sDecenas = ""
sY = ""
Case "3"
sDecenas = " treinta"
Case "4"
sDecenas = " cuarenta"
Case "5"
sDecenas = " cincuenta"
Case "6"
sDecenas = " sesenta"
Case "7"
sDecenas = " setenta"
Case "8"
sDecenas = " ochenta"
Case "9"
sDecenas = " noventa"
End Select
Select Case sUnidades
Case "0"
sUnidades = ""
Case "1"
sUnidades = sY & " un " & IIf(vbMasculino, "", "a")
Case "2"
sUnidades = sY & " dos"
Case "3"
sUnidades = sY & " tres"
Case "4"
sUnidades = sY & " cuatro"
Case "5"
sUnidades = sY & " cinco"
Case "6"
sUnidades = sY & " seis"
Case "7"
sUnidades = sY & " siete"
Case "8"
sUnidades = sY & " ocho"
Case "9"
sUnidades = sY & " nueve"
End Select
End Select
fsTriada = sCentenas & sDecenas & sUnidades
Exit Function
Err_fsTriada:
MsgBox "ERROR " & CStr(Err.Number) & " - " & Err.Des - c - r - i - p - tion
fsTriada = " "
Exit Function
End Function
'
'Realiza la conversion de Cifras a Letras. Parametros:
' vlCantidad : Cantidad a convertir
'
Public Function fsConvertirALetras( _
ByVal vlCantidad As Long _
) As String
On Local Error GoTo Err_fsConvertirALetras
Dim sCantidad As String
Dim iLongitud As Integer 'Longitud de la Cantidad pasada
Dim sCientos As String
Dim sMiles As String
Dim sMillones As String
If vlCantidad > 999999999 Then
MsgBox "La cifra ha de ser inferior a 1.000.000.000"
fsConvertirALetras = ""
Exit Function
End If
If vlCantidad = 0 Then
fsConvertirALetras = "cero"
Exit Function
End If
sCantidad = Trim$(Str$(vlCantidad))
iLongitud = Len(sCantidad)
sMillones = ""
sMiles = ""
sCientos = ""
If iLongitud > 6 Then 'Hay millones
sMillones = fsTriada(Left$(sCantidad, iLongitud - 6), True)
sMillones = sMillones & IIf(Trim$(sMillones) = "un", " millón", "millones")
sCantidad = Trim$(Right$(sCantidad, 6))
iLongitud = Len(sCantidad)
End If
If iLongitud > 3 Then 'Hay miles
sMiles = fsTriada(Left$(sCantidad, iLongitud - 3), False)
If sMiles = " " Then
sMiles = IIf(Left$(Trim$(sMiles), 2) = "un ", " ", sMiles) & " mil "
End If
sCantidad = Trim$(Right$(sCantidad, 3))
iLongitud = Len(sCantidad)
End If
sCientos = fsTriada(sCantidad, False)
fsConvertirALetras = Trim$(sMillones & sMiles & sCientos)
Exit Function
Err_fsConvertirALetras:
MsgBox "ERROR " & CStr(Err.Number) & " - " & Err.Des - c - r - i - p - tion
fsConvertirALetras = " "
Exit Function
End Function
Guardalo con rl nombre que tu quieres
Ahora diseña tu formulario y en un campo independiente le llamas Miresultado
ahora en propiedades del formulario, procedimientos, después de actualizar pegas esto
Private Sub Texto0_AfterUpdate()
MiResultado = fsConvertirALetras(El Nombbre del campo donde está el valor numerico)
End Sub
Andi
Gracias por tu tiempo. Ya lo pegué en un modulo, pero sabés que ocurre que no es para un formulario. Es para un informe. ¿La función en que item de propiedades la coloco?
Gracias y perdoná de abusar de amabilidad.
La función sirve para el informe también.
En propiedades del informe, eventos, al activar
pega el código y le pones tus campos
ValorLetra.Caption = fsConvertirALetras(ValorNumero)
ValorLetra tiene que ser una etiqueta y ValorNumero el campo donde está el valor
Esta opción solo te permite elegir el primer campo, si tienes la opción de muchos cheques no se si te dejará.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas