Quién sabe cómo puedo usar esté código vba para números en letras para una factura?

Reciban un cordial saludo. Bien pongo en este escenario para solicitar su valiosa ayuda.

Tengo este código que conseguí pero deseo aplicarlo a un formulario que tengo cuyo nombre es FmIgFactura. En este tengo el valor de la factura total. Igualmente tengo un reporte cuyo nombre es RpInfQry_Factura1

Function EstáCargado(ByVal txtNombreFormulario As String) As Boolean
' Devuelve Verdadero si se ha abierto el formulario especificado en la vista Formulario o la vista Base de datos.
Dim oAccessObject As AccessObject
Set oAccessObject = CurrentProject.AllForms(txtNombreFormulario)
If oAccessObject.IsLoaded Then
If oAccessObject.CurrentView <> acCurViewDesign Then
EstáCargado = True
End If
End If

End Function

Private Function N2T_1to15(ByVal Valor As Integer) As String
Dim R As String
Select Case Valor
Case 1: R = "un "
Case 2: R = "dos "
Case 3: R = "tres "
Case 4: R = "cuatro "
Case 5: R = "cinco "
Case 6: R = "seis "
Case 7: R = "siete "
Case 8: R = "ocho "
Case 9: R = "nueve "
Case 10: R = "diez "
Case 11: R = "once "
Case 12: R = "doce "
Case 13: R = "trece "
Case 14: R = "catorce "
Case 15: R = "quince "
Case Else: R = " "
End Select
N2T_1to15 = R
End Function

Private Function N2T_1to99(ByVal Valor As Integer) As String
Dim R As String
Select Case Valor
Case 1 To 15: R = N2T_1to15(Valor)
Case 16 To 19: R = "dieci" & N2T_1to15(Valor - 10)
Case 20: R = "veinte "
Case 21 To 29: R = "veinti" & N2T_1to15(Valor - 20)
Case 30: R = "treinta "
Case 31 To 39: R = "treinta y " & N2T_1to15(Valor - 30)
Case 40: R = "cuarenta "
Case 41 To 49: R = "cuarenta y " & N2T_1to15(Valor - 40)
Case 50: R = "cincuenta "
Case 51 To 59: R = "cincuenta y " & N2T_1to15(Valor - 50)
Case 60: R = "sesenta "
Case 61 To 69: R = "sesenta y " & N2T_1to15(Valor - 60)
Case 70: R = "setenta "
Case 71 To 79: R = "setenta y " & N2T_1to15(Valor - 70)
Case 80: R = "ochenta "
Case 81 To 89: R = "ochenta y " & N2T_1to15(Valor - 80)
Case 90: R = "noventa "
Case 91 To 99: R = "noventa y " & N2T_1to15(Valor - 90)
End Select
N2T_1to99 = R
End Function
Private Function N2T_1to999(ByVal Valor As Integer) As String
Dim R As String
Select Case Valor
Case 1 To 99: R = N2T_1to99(Valor)
Case 100: R = "cien"
Case 101 To 199: R = "ciento " & N2T_1to99(Valor - 100)
Case 200 To 299: R = "doscientos " & N2T_1to99(Valor - 200)
Case 300 To 399: R = "trescientos " & N2T_1to99(Valor - 300)
Case 400 To 499: R = "cuatrocientos " & N2T_1to99(Valor - 400)
Case 500 To 599: R = "quinientos " & N2T_1to99(Valor - 500)
Case 600 To 699: R = "seiscientos " & N2T_1to99(Valor - 600)
Case 700 To 799: R = "setecientos " & N2T_1to99(Valor - 700)
Case 800 To 899: R = "ochocientos " & N2T_1to99(Valor - 800)
Case 900 To 999: R = "novecientos " & N2T_1to99(Valor - 900)
End Select
N2T_1to999 = R
End Function

Private Function N2T_1to999_999(ByVal Valor As Double) As String
Dim R As String
Dim M, C As Integer
M = Int((Valor / 1000))
C = Int((Valor - M * 1000))
Select Case Int(Valor)
Case 1 To 999: R = N2T_1to999(C)
Case 1000 To 999999: R = N2T_1to999(M) & "mil " & N2T_1to999(C)
End Select
N2T_1to999_999 = R
End Function

Private Function N2T_1to999_999_999_999(ByVal Valor As Double) As String
Dim R As String
Dim MM, M, C As Integer
MM = Int(Valor / 1000000)
M = Int((Valor - MM * 1000000))
Select Case Int(Valor)
Case 1 To 999999: R = N2T_1to999_999(M)
Case 1000000 To 1999999: R = "un millon " & N2T_1to999_999(Int(M))
Case 2000000 To 999999999999#: R = N2T_1to999_999(Int(MM)) & "millones " & N2T_1to999_999(Int(M))
Case Else: R = "Numero demasiado grande"
End Select
N2T_1to999_999_999_999 = R
End Function

Function Moneda2Texto(ByVal Valor As Double, DLLS As Boolean) As String
Dim Cent As Double
Dim MM, M As Double
Dim R As String
MM = Int(Valor / 1000000)
M = Int(Valor - MM * 1000000)
Cent = Round((Valor - Int(Valor)), 2) * 100
R = N2T_1to999_999_999_999(Int(Valor))
If Valor = 0 Then
R = "cero "
End If
If DLLS Then
If Valor = 1 Then
R = "un dolar "
Else
R = R & "dolares "
End If
Else
If Valor = 1 Then
R = "un peso "
Else
R = R & "pesos "
End If
End If
If Cent < 10 Then R = R & "0"
R = R & Cent & "/100 "
If Not DLLS Then R = R & "m.n."
Moneda2Texto = R

End Function

Eeste está presente como un módulo.

Y he visto que es interesante porque con éste puedo tomar el valor en número del total de la factura y convertirlo en letras.

Pero la verdad no sé como hacerlo y deseo aprender.

1 Respuesta

Respuesta
2

Muy fácil, y puedes hacerlo de varias formas:

1º/ Si usas una consulta como base del formulario o informe en el que creas la factura, puedes añadir una columna a esa consulta con un campo así:

TotalLetra: Moneda2Texto([Total],-1)

Siendo Total el nombre del campo donde tienes el total factura y el -1 para indicar que quieres el texto de dólares (si lo quieres en pesos pon 0 en vez de -1)

2º/ En tu formulario o informe pon un cuadro de texto independiente y como origen de la fila le pones:

=Moneda2Texto([Total],-1)

3º/ Por VBA, en el evento que consideres más adecuado (dependerá de si es un formulario o informe):

Me.txtTotalLetra=Moneda2Texto([Total],-1)

De todas formas, comentarte que en esta página hay preguntas sobre este tema con respuestas con códigos más sencillos, como por ejemplo: Como hacer código de numero a letras en informe access

Un saludo.


Buenos días amigo como estas, muchas gracias por tu valiosa ayuda. 

Deseo hacerte una consulta más si tengo en el informe un control etiqueta cuyo nombre es letras

puedo hacerlo asi....

letras.caption = Moneda2Texto([Total],-1)

y adaptarlo en un control que tengo que va en un procedimiento de evento Form_load() de este informe?

Mil gracias

Los eventos de informes no funcionan exactamente igual que los de formularios. Yo lo pondría en el evento "al dar formato" de la sección donde tengas ese control.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas