ayuda con procedimiento

Iniciado por 4D1cTo, 12 Febrero 2008, 05:30 AM

0 Miembros y 1 Visitante están viendo este tema.

4D1cTo

estoy realizando un procedimiento para validar datos que sean solo de tipo numerico

Sub Valida(txtVar, error)
Dim error As String
If IsNumeric(txtVar) = False Then
   MsgBox ("Error en (" & error & ")")
End If
End Sub

No se donde esta el error , lo llamaria de la siguiente manera

Valida (txtValida,Celular)

yo quiero que valide el txtValida y en la parte del error muestre "Error en Celular"

se entiende ?
gracias
[ Linux Registered User #348950 ]

~~

Y por q no haces q el textbox en cuestion solo acepte numeros y ya esta??

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 8 Then Exit Sub

If KeyAscii < 48 Or KeyAscii > 58 Then
KeyAscii = 0

End If

End Sub

4D1cTo

porque tengo alrededor de 30 textbox para validar  :laugh:
[ Linux Registered User #348950 ]

~~

Pues los llamas a todos igual (vamos creas una matriz de controles) y pegas el mismo codigo:

Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 8 Then Exit Sub

If KeyAscii < 48 Or KeyAscii > 58 Then
KeyAscii = 0

End If
End Sub


Y solucionado, ninguno admite letras ;)

4D1cTo

esos txt despues van a una base de datos

y si todos tienen el mismo nombre se me lia  :-X
[ Linux Registered User #348950 ]

~~

Te refieres a ellos por su index, por ej text1(25).text...

A mi me parece mas practico q andar llamando a una funcion todo el rato, pero weno si kieres la funcion kedaria asi:

CitarSub Validar(txt As TextBox, Error As String)
    Dim n As Integer, Digito As String * 1
    For n = 1 To Len(txt.Text)
        Digito = Mid(txt.Text, n, 1)
        If Asc(Digito) < 48 Or Asc(Digito) > 58 Then
            MsgBox "Error en (" & Error & ")"
            Exit Sub
        End If
    Next n
End Sub


Private Sub Command1_Click()
    Call Validar(Text1, "Celular")
End Sub

Si tiene una sla letra el textbox salta error, si no no ;)

4D1cTo

muchas gracias , ahora a renegar con el ado  ;D
[ Linux Registered User #348950 ]

black_jjk

Lo que ha dicho EON es correcto, ese es el camino que deberías seguir si estas apenas diseñando tu programa o si tuvieras ganas de cambiarle el nombre a tus controles y crear una matríz de controles, pero por lo visto de da flojera o simplemente no te gusta la idea, tú código esta mal desde un principio:

Citar
Sub Valida(txtVar, error)
Dim error As String
Si pretendes pasar "error" como argumento para tu función debería de quedar así:

Fuction Validar(ElTexto As String, QueError As String)
If Not IsNumeric(ElTexto)Then
   MsgBox ("Error en (" & QueError & ")")
End If


Porque al declarar otra vez la error como String en la segunda linea de tu código eliminas el argumento que habías pasado.
End Function

Chefito

#8
Mmmmm, por lo que veo es un número de teléfono lo que quiere tratar (por lo de celular). Hay que tener en cuenta que la función IsNumeric da como verdadero a un número con una coma o varios puntos (incluso puntos seguidos, haz la prueba), según la configuración del caracter decimal. Por eso, cuidado! que lo mismo no le interesa que le entre esos caracteres ;) (y menos puntos a gogo :)). Una forma de solucionarlo sería quitando estos caracteres con la función replace (ejem: texto=replace(texto,",",""). Pero hay no solo acaba el problema, sino que tambien acepta números como 2,342342E+22, ya que vienen de los tipos single y double del vb. Más para sustituir con replace jajajajaja. Pero sigue habiendo más problemas........ también da como verdadero los números hexadecimales (&had) y octales (&34)....también el signo más y menos (+,-) al principio del número....puffffff Más sustituciones. Y quien sabe que más aceptará  :rolleyes:.
Ya se que son casos raros de ver, pero todo puede pasar.....y son fallos.
Al final pienso que se debe restringir la entrada de teclas con el evento keypress o hacer lo que dice eon....revisar los caracteres uno a uno.
Saludos.
P.D. Todas estas sustituciones se deberían realizar despues de que IsNumeric hubiese dado verdadero al número. Pero sigo pensando que no es lo más correcto.
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)