Pasar números de un campo a letras

Me gustaría conocer el código para escribir en un campo en letra la cantidad en numero de otro campo todo en MS ACCESS
Saludos
AAS

1 Respuesta

Respuesta
1
Aquí te envío un módulo con tres procedimientos de los que sólo tendrás que utilizar la función abcednum indicándole el número y el género del número (masculino, femenino o neutro)
Option Compare Database 'Usar orden de base de datos en comparaciones de cadenas
Option Explicit
Global G_Genero_Numero As String
Global Const NUM_FEM = 0
Global Const NUM_MAS = 1
Global Const NUM_NEU = 2
Function abcednum(Num, lang As String) As String
G_Genero_Numero = lang
Select Case lang
Case "es", "esf"
abcednum = n2t_tbs_es(Num, NUM_FEM)
Case "esm"
abcednum = n2t_tbs_es(Num, NUM_MAS)
Case "esn"
abcednum = n2t_tbs_es(Num, NUM_NEU)
Case Else
abcednum = n2t_tbs_es(Num, NUM_FEM)
G_Genero_Numero = "es"
End Select
End Function
Function n2t_tbs_es(Num, sexo) As String
Dim abnum As Long, _
txt As String, _
xt As String
If Abs(Fix(Num)) > 999999999 Then
n2t_tbs_es = "Excedido valor soportado."
Exit Function
End If
abnum = Abs(Fix(Num))
xt = Right$(Format$(Fix(abnum / 1000000), "000"), 3)
If Val(xt) <> 0 Then txt = n2t_tbs_es_f(1, xt, sexo)
xt = Right$(Format$(Fix(abnum / 1000), "000"), 3)
If Val(xt) <> 0 Then txt = txt & n2t_tbs_es_f(2, xt, sexo)
xt = Right$(Format$(abnum, "000"), 3)
If Val(xt) <> 0 Then txt = txt & n2t_tbs_es_f(3, xt, sexo)
n2t_tbs_es = txt
End Function
Function n2t_tbs_es_f(n As Integer, cf As String, sexo) As String
' sexo: 0=femenino, 1=masculino, 2=masculino terminado en UN
Static cf1(16) As String, cf2(10) As String, cf3(10) As String, sw As Integer
Dim ftxt As String
If sw = 0 Then
cf1(1) = "UNA"
cf1(2) = "DOS"
cf1(3) = "TRES"
cf1(4) = "CUATRO"
cf1(5) = "CINCO"
cf1(6) = "SEIS"
cf1(7) = "SIETE"
cf1(8) = "OCHO"
cf1(9) = "NUEVE"
cf1(10) = "DIEZ"
cf1(11) = "ONCE"
cf1(12) = "DOCE"
cf1(13) = "TRECE"
cf1(14) = "CATORCE"
cf1(15) = "QUINCE"
cf2(1) = "DIECI"
cf2(2) = "VEINTI"
cf2(3) = "TREINTA"
cf2(4) = "CUARENTA"
cf2(5) = "CINCUENTA"
cf2(6) = "SESENTA"
cf2(7) = "SETENTA"
cf2(8) = "OCHENTA"
cf2(9) = "NOVENTA"
cf3(1) = "CIENTO"
cf3(2) = "DOS"
cf3(3) = "TRES"
cf3(4) = "CUATRO"
cf3(5) = "QUINIEN"
cf3(6) = "SEIS"
cf3(7) = "SETE"
cf3(8) = "OCHO"
cf3(9) = "NOVE"
sw = 1
End If
If sexo = 0 Then cf1(1) = "UNA" Else If n = 3 And sexo = 1 Then cf1(1) = "UNO" Else cf1(1) = "UN"
If Val(cf) = 1 And n = 2 Then GoTo sx4_n2t_tbs_es
If Mid$(cf, 1, 1) = "0" Then GoTo sx2_n2t_tbs_es
If Val(cf) = 100 Then ftxt = "CIEN": GoTo sx4_n2t_tbs_es
ftxt = cf3(Val(Mid$(cf, 1, 1)))
Select Case Val(Mid$(cf, 1, 1))
Case 1
ftxt = ftxt & " ": GoTo sx2_n2t_tbs_es
Case 2 To 4, 6 To 9
ftxt = ftxt & "CIEN"
End Select
If n > 1 And sexo = 0 Then
ftxt = ftxt & "TAS "
Else
ftxt = ftxt & "TOS "
End If
sx2_n2t_tbs_es:
Select Case Val(Mid$(cf, 2))
Case 10
ftxt = ftxt & "DIEZ "
Case 2 To 15
ftxt = ftxt & cf1(Val(Mid$(cf, 2)))
Case 20
ftxt = ftxt & "VEINTE "
Case Else
If Val(Mid$(cf, 2, 1)) > 0 Then ftxt = ftxt & cf2(Val(Mid$(cf, 2, 1)))
If Val(Mid$(cf, 2, 1)) > 2 Then
If Val(Mid$(cf, 3, 1)) = 0 Then GoTo sx4_n2t_tbs_es
ftxt = ftxt & " Y "
End If
If n = 1 And Mid$(cf, 3, 1) = "1" Then
ftxt = ftxt & "UN"
ElseIf Val(Mid$(cf, 3, 1)) > 0 Then
ftxt = ftxt & cf1(Val(Mid$(cf, 3, 1)))
End If
End Select
sx4_n2t_tbs_es:
Select Case n
Case 1
Select Case Val(cf)
Case 1
ftxt = ftxt & " MILLON "
Case Is > 1
ftxt = ftxt & " MILLONES "
End Select
Case 2
ftxt = ftxt & " MIL "
End Select
n2t_tbs_es_f = ftxt
End Function
SUERTE y que te sirva de ayuda.
Hasta luego.
NOTA: Si necesitas que se reconozca también la parte decimal, te recomiendo que te pases por esta dirección (http://guille.costasol.net/utilidades/cNum2Text.htm) donde tienen el mismo procedimiento pero mejorado para reconocer los decimales de la cantidad. EL Guille es un tipo genial y su web una pasada para los programadores de VB .NET .
Si pudieras mandarme el código para números con decimales sería total.
Por lo demás la solución me ha servido mucho muchas gracias
Saludos
AAS

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas