Spenchy | |
| 2008-03-06 21:35 - Respuestas: 1 - Tema nº: 2505482
Características: Windows XP Profesional, p4 mb 512 dd 80.
lo hago creando un modulo y despues lo llamo desde un formulario , y cuando quiero trabajarlo me aparece este error: se esperaba una variable o un procedimiento no un modulo que puedo hacer:
ejemplo:
'Convierte una triada en letras. Parámetros:
' vsNumeros : Triada a convertir
' vbMasculino : Indica si se debe usar el masculino o el femenino
'
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
eso lo pongo en un modulo y despues lo llamo desde un formulario asi:
Private Sub Texto0_AfterUpdate()
Me.Texto2 = fsConvertirALetras(Me.Texto0)
End Sub
ayuda por favor...
| |
|
|
DJJaaM | |
|
Re: No puedo convertir num a texto en acces - 2008-03-26 06:26 - Respuesta 2
Amigo, intenta con esto:
Private Sub Texto0_AfterUpdate()
Me.Texto2 = fsConvertirALetras(Val(Me.Texto0))
End Sub
Por defecto, visual devuelve un valor STRING desde un textbox, por lo cual si quieres enviar un valor NUMERICO a una funcion, conviertelo previamente con VAL(STR), lo que te devolvera un valor NUMERICO desde el textbox....
Saludos... | |
|
|
|