Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Evento KeyPress (Enter)

111 views
Skip to first unread message

Luis

unread,
Mar 29, 2007, 1:48:52 PM3/29/07
to
Qué tal?? he intentado aplicar el siguiente código para el evento
KeyPress en un formulario, aplicandolo a la tecla enter, cuando lo
ejecuto y presiono esta tecla simplemente va a siguiente textbox, la
verdad no sé que estoy haciendo mal pues tengo entendido que el
KeyAscii correspondiente es el 13. Si pueden ayudarme les agradecería
mucho!!!

Private Sub txtIdentificacion_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
If KeyAscii = 13 Then
If txtIdentificacion.Text <> "" Then
ValidaDocumento txtIdentificacion.Text
Else
MsgBox "Debe ingresar el codigo"
End If
End If
End Sub

Héctor Miguel

unread,
Mar 29, 2007, 3:45:34 PM3/29/07
to
hola, Luis !

> ... he intentado aplicar el siguiente codigo para el evento KeyPress en un formulario


> aplicandolo a la tecla enter, cuando lo ejecuto y presiono esta tecla simplemente va a siguiente textbox

> la verdad no sé que estoy haciendo mal pues tengo entendido que el KeyAscii correspondiente es el 13...

1) el codigo que expones [segun se aprecia] esta 'trabajando bien' -???- [simplemente]
a) 'detecta' si la tecla que se ha pulsado es la tecla {enter} con el -> If KeyAscii = 13 Then
b) [despues de pulsar enter] 'verifica' si el control NO se ha dejado 'vacio' con el -> If txtIdentificacion.Text <> "" Then
c) despues de NO vacio, manda a ejecutarse otro procedimiento con el -> ValidaDocumento txtIdentificacion.Text
d) si el control de texto esta vacio... manda un cuadro de mensajes con el -> MsgBox "Debe ingresar el codigo"
e) si la tecla pulsada NO es {enter}... simplemente... no hace nada :))
-> en ningun momento le estas indicando al codigo que si el control esta vacio no debe permitir al usuario cambiar de control :-(

2) si esto ultimo es tu intencion... usa el evento '_exit' para cancelar/evitar/... la salida del control [p.e.]

Private Sub txtIdentificacion_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = Trim(txtIdentificacion) = ""
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __

Luis

unread,
Mar 30, 2007, 10:53:11 AM3/30/07
to
Qué tal?? Gracias por responder Héctor... sabes he probado y sigo con
el mismo problema mi idea es la siguiente:
que el usuario ingrese un número de identificación y que cuando
presione enter este número ingresado sea verificado por un
procedimiento denominado ValidaDocumento el cual como resultado
muestra un mensaje que indica si el número ingresado es válido o
no.... No más y la verdad no entiendo por qué no funciona... si me
ayudas te lo agradecería Mucho!!!.... Gracias por tú atención!!

Saludos

Héctor Miguel

unread,
Mar 30, 2007, 1:48:22 PM3/30/07
to
hola, Luis !

> ... sabes he probado y sigo con el mismo problema mi idea es la siguiente:

> que el usuario ingrese un numero de identificacion y que cuando presione enter
> este numero ingresado sea verificado por un procedimiento denominado ValidaDocumento


> el cual como resultado muestra un mensaje que indica si el número ingresado es válido o no

> ... No mas y la verdad no entiendo por que no funciona...

no me queda muy 'claro' si la que has 'probado' incluye la propuesta del punto 2 del mensaje anterior ?-
'dejame repetirte' la parte final de mi correo anterior [es probable que no lo hayas 'captado'] -?-

Luis

unread,
Mar 30, 2007, 2:28:42 PM3/30/07
to
Pues si Héctor tomé en cuenta la recomendación que me diste usando el
evento exit y funciona en el sentido de que no me deja salir del
control cuando este está vacío, pero cuando ya he ingresado un número
y presiono enter simplemente pasa al siguiente textbox y JAMÁS realiza
la comprobación del número pues puse un punto de inspección en el
procedimiento ValidaDocumento y en ningún momento pasa por allí !!!
¿¿¿???!!! La verdad no entiendo por qué no realiza la validación eso
es lo más importante... esto me tiene preocupado pues lo necesito
urgenteeee!! ojalá puedas ayudarme!!! GRACIAS

Luis

unread,
Mar 30, 2007, 2:53:20 PM3/30/07
to
Es más Héctor acabo de poner un punto de inspección en: If
txtIdentificacion.Text <> "" Then ... y jamás pasa por allí, es como
si no reconociera a la tecla enter con el ascii 13 ¿?¿?¿?¿?¿?¿?
Ayuuuuuda por favor!!! Gracias!!!

Héctor Miguel

unread,
Mar 30, 2007, 7:10:35 PM3/30/07
to
hola, Luis !

> ... acabo de poner un punto de inspección en: If txtIdentificacion.Text <> "" Then
> ... y jamás pasa por allí, es como si no reconociera a la tecla enter con el ascii 13 ...

el evento 'keypress' [generalmente] se usa para 'validar' las entradas 'imprimibles' [caracteres ascii]
para el efecto que necesitas de 'liberar' el enfoque al presionar enter...
______
Private Sub txtIdentificacion_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then


If txtIdentificacion.Text <> "" Then
ValidaDocumento txtIdentificacion.Text
Else
MsgBox "Debe ingresar el codigo"
End If
End If
End Sub

nota: no se alcanza a 'ver' que es lo que hace el procedimiento ValidaDocumento -???-

si cualquier duda [o informacion adicional]... comentas ?
saludos,

hector.


Luis

unread,
Apr 2, 2007, 6:14:14 PM4/2/07
to
Héctor Muchas Gracias!!! probé el código y sirve a la perfección!!
Ahhh con respecto a tú pregunta ValidaDocumento es un procedimiento
que determina si el número de identificación ingresado en el textbox
es válido de acuerdo a ciertas restricciones que hay sobre los mismos
en mi país y lo que hace es que dado un número indica si este es
válido o no a través de un mensaje... Tan sólo hay un detalle que me
gustaría me ayudes a solucionar.. cuando ingreso un número de
identificación NO VÁLIDO se me indica a través de un mensaje que no lo
es, peeeero igual pierde el enfoque... me gustaría que esto suceda
sólo si el número de identificación SI ES VÁLIDO, es decir que no se
pueda salir del control mientras no se ingrese uno válido.... Saludos
y Muchísimas Gracias nuevamente..

Héctor Miguel

unread,
Apr 3, 2007, 12:02:52 AM4/3/07
to
hola, Luis !

> ... ValidaDocumento es un procedimiento que determina si el numero de identificacion
> ingresado en el textbox es valido... o no a traves de un mensaje
> ... hay un detalle que... solucionar.. cuando ingreso un numero... NO VALIDO
> ... indica a traves de un mensaje que no lo es, pero igual pierde el enfoque
> ... me gustaría que esto suceda solo si el numero de identificación SI ES VALIDO
> es decir que no se pueda salir del control mientras no se ingrese uno valido....

1) ya comprobaste que el evento '_exit' puede impedir que el usuario 'abandone' un control
-> mientras 'el control' tenga el foco
-> otra forma de 'devolver' el foco a un control que lo haya perdido es una instruccion del tipo: <objeto>.SetFocus
-> si tienes forma de identificar cual control se esta 'validando'... utiliza la instruccion con un 'SetFocus'

2) dado que el usuario puede cambiar de control NO 'necesariamente' hacia 'el siguiente' [en un orden pre-supuesto]
y como no es 'claro' si el procedimiento 'ValidaDocumento' lo mantienes separado para usarlo con varios controles...
-> si NO tienes forma de identificar el control... necesitaras 'mover' las instrucciones de validacion al evento '_exit'

Luis

unread,
May 15, 2007, 7:19:39 PM5/15/07
to
Héctor he usado el siguiente código:

Private Sub txtIdentificacion_KeyDown(ByVal KeyCode As
MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
If txtIdentificacion.Text <> "" Then
ValidaDocumento txtIdentificacion.Text
Else

MsgBox "Debe ingresar el ID"


End If
End If
End Sub

Private Sub txtIdentificacion_Exit(ByVal Cancel As


MSForms.ReturnBoolean)
Cancel = Trim(txtIdentificacion) = ""
End Sub

El código de ValidaDocumento es bastante extenso pero suponiendo que
sea el siguiente:

Sub ValidaDocumento(Pcedula As String)

If Len(Trim(Pcedula)) >= 10 Then
msgbox "ID Válido"
textbox1.SetFocus 'pasa al siguiente TextBox
else
msgbox "ID no válido"
txtIdentificacion.SetFocus 'No cambia el foco
End if

End Sub

Funciona bien en el sentido que no me permite salir de
txtIdentificación mientras no ingrese un número, pero si el número
ingresado es válido o no igual pasa al siguiente textbox (TextBox1).
Mi intención es que el usuario:
1. No pueda salir del TextBox mientras no ingrese un número.
2. No pueda salir del TextBox mientras el número ingresado no pase la
prueba de ValidaDocumento, para nuestro supuesto que la longitud de la
cadena sea mayor o igual a 10. O mejor dicho que no pueda hacer NADA
si el ID ingresado en txtIdentificacion no es Válido.

Muchas Gracias por tú valiosa ayuda!!


Héctor Miguel

unread,
May 15, 2007, 7:49:08 PM5/15/07
to
hola, Luis !

1) si es necesario un [sub] procedimiento para 'validar' que la entrada de un textbox sea 'valida'...
supongo que podrian ser tambien diferentes las condiciones para validar uno u otro textbox segun... ???

2) lo 'intrigante' pudiera ser si vas a 'forzar' un avance al 'textbox1' como 'siguiente'... [siempre ???]
de lo contrario... como puedes estar seguro de a cual control tiene intenciones de cambiarse el usuario ?

3) prueba a evitar la salida del control uniendo las condiciones [para el caso especifico de este ejemplo] con algo como:

Private Sub txtIdentificacion_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Cancel = Trim(txtIdentificacion) = "" Or Len(Trim(txtIdentificacion)) < 10
If Cancel Then MsgBox "Entrada no valida !!!"
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
> ... he usado el siguiente codigo:


> Private Sub txtIdentificacion_KeyDown(ByVal KeyCode As
> MSForms.ReturnInteger, ByVal Shift As Integer)
> If KeyCode = vbKeyReturn Then
> If txtIdentificacion.Text <> "" Then
> ValidaDocumento txtIdentificacion.Text
> Else
> MsgBox "Debe ingresar el ID"
> End If
> End If
> End Sub
>
> Private Sub txtIdentificacion_Exit(ByVal Cancel As MSForms.ReturnBoolean)
> Cancel = Trim(txtIdentificacion) = ""
> End Sub
>

> El codigo de ValidaDocumento es bastante extenso pero suponiendo que sea el siguiente:


>
> Sub ValidaDocumento(Pcedula As String)
> If Len(Trim(Pcedula)) >= 10 Then
> msgbox "ID Válido"
> textbox1.SetFocus 'pasa al siguiente TextBox
> else
> msgbox "ID no válido"
> txtIdentificacion.SetFocus 'No cambia el foco
> End if
> End Sub

> Funciona bien en el sentido que no me permite salir de txtIdentificacion mientras no ingrese un numero
> pero si el numero ingresado es valido o no igual pasa al siguiente textbox (TextBox1). Mi intencion es que el usuario:
> 1. No pueda salir del TextBox mientras no ingrese un numero.
> 2. No pueda salir del TextBox mientras el numero ingresado no pase la prueba de ValidaDocumento


> para nuestro supuesto que la longitud de la cadena sea mayor o igual a 10.

> O mejor dicho que no pueda hacer NADA si el ID ingresado en txtIdentificacion no es Valido.


0 new messages