Validar Números
Fecha: 31/Ago/97
Autor: Gerardo Alvarez
From: "Gerardo Alvarez" [email protected]
Date sent: Thu, 28 Aug 1997 11:59:56 -0400
Nota al Guille: si te gusta la publicas en tus páginas:
(era una respuesta a una consulta de la lista VB-ESP)
Lo que tu preguntas, lo soluciono en tres pasos:
1 - En el evento KeyPress dejo pasar sólo números y opcionalmente el
punto decimal, si el campo lo acepta.
El SetFocus a Command2 sólo dispara el evento LostFocus . Command2 no
necesita hacer nada, incluso puede estar oculto tras otro control....
el setfocus al siguiente campo lo haré en el lostfocus de este campo si
las validaciones pasan ok.
Sub Text1_KeyPress (KeyAscii As Integer)
char = Chr(KeyAscii)
If KeyAscii = enter Then GoTo sigue1
If KeyAscii = backsp Then GoTo sigue1
'If char = "." Then GoTo sigue1 'opcional
If IsNumeric(char) Then
GoTo sigue1
Else
msg = "Debe ser Numérico"
MsgBox msg, 16, progname$
KeyAscii = H00
Text1.SetFocus
GoTo fint1kp
End If
sigue1:
If KeyAscii = enter Then command2.SetFocus
If KeyAscii = backsp Then GoTo fint1kp
If Len(Text1) > 7 Then command2.SetFocus
fint1kp:
End Sub
2 - En el evento LostFocus llamo a la función val_ent_dec con tres
parametros: el campo con el número, los enteros y los decimales así:
En el ejemplo: text1 con cuatro enteros y dos decimales.
vderr = val_ent_dec(text1, 4, 2)
If vderr Then
text1.Visible = True
text1.SetFocus
GoTo t10fin
End If
....otras validaciones p.ej. si el número está en el maestro de
clientes, etc...
....Si esta bien, hago setfocus al siguiente texto.
3 - La función para validar enteros y decimales:
Function val_ent_dec (vdnum, vdent, vddec)
Dim vdi
Dim vdpunto
Dim vdcont
Dim vdcent
Dim vdx
vdx = Str$(Val(vdnum))
vdpunto = 0
vdcont = 0
vdcent = 0
For vdi = 1 To Len(vdx)
If vdpunto = 1 Then vdcont = vdcont + 1 Else vdcent = vdcent + 1
If Mid(vdx, vdi, 1) = "." Then vdpunto = 1: vdcent = vdcent - 1
Next vdi
If vdcont > vddec Then
val_ent_dec = 1
If Val(vddec) = 0 Then
msg = "Error, Máximo " & vdent & " enteros sin decimales."
Else
msg = "Error, Máximo " & vddec & " decimales."
End If
MsgBox msg, 16, progname$
ElseIf vdcent > vdent + 1 Then
val_ent_dec = 1
If Val(vddec) = 0 Then
msg = "Error, Máximo " & vdent & " enteros."
Else
msg = "Error, Máximo " & vdent & " enteros y " & vddec & " decimales."
End If
MsgBox msg, 16, progname$
Else
val_ent_dec = 0
End If
'EJEMPLO DE LLAMADA
' vderr = val_ent_dec(text1, 4, 2)
' If vderr = 1 Then
' text1.visible = true
' text1.setfocus
' GoTo ffin
' End If
End Function
Y tengo otra funcioncita para validar fechas, si a alguien le
interesa....
Se oyen sugerencias!!!!
Buena Suerte, Amigo
Gerardo Alvarez
[email protected]