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]