Anular la pulsación de teclas
Pregunta
¿Cómo puedo anular el efecto de la pulsación de teclas como el RePag, AvPag, Esc o similares al trabajar con formularios?
Respuesta
Si quieres anular la pulsación de alguna tecla al trabajar con formularios, primero debes ir a la ventana de propiedades del formulario y poner la propiedad Tecla de vista previa (KeyPreview) a Sí. De esta manera, se fuerza a que el formulario sea el primero en detectar la pulsación de cualquier tecla, antes de que lo haga el control activo en ese momento, que, de otra manera, sería el primero en hacerlo. Después deberemos utilizar algún tipo de código para detectar la pulsación de la tecla en el evento Al bajar una tecla (KeyDown) y anularla. Este evento detecta prácticamente todas las pulsaciones de teclas, en detrimento del evento Al presionar una tecla (KeyPress) que sólo detecta las teclas típicas de la escritura como son los caracteres alfanuméricos y los símbolos utilizados en los diferentes idiomas.
En nuestro caso, podemos llamar a una función genérica que he construído y que servirá para anular cualquier tipo de tecla que le pasemos en su segundo parámetro, el cual tiene un número de elementos indeterminado.
La función DeleteKeys tiene los siguientes argumentos
Argumentos
Nombre | Descripción |
---|---|
KeyCode | Requerido. El valor de la tecla pulsada y que está recogida en el primer argumento del evento KeyDown, del mismo nombre: KeyCode |
Keys | Opcional. Lista separada por comas de los valores ASCII o las constantes Visual Basic (ver estas constantes en este enlace) de las teclas que se quieren anular. |
Esta función también puede ser utilizada a través del evento KeyDown de un control. Funcionará de la misma manera que para un formulario.
Ejemplo de uso
' esta llamada a la función DeleteKeys anulará la pulsación de las
' teclas RePag y AvPag en el evento KeyDown de un formulario
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Call HelpKeys(KeyCode, vbKeyPageUp, vbKeyPageDown)
End Sub
Codigo
Pega esta función en un módulo estandar:
'---------------------------------------------------------
'
' DeleteKeys
'
' Código escrito originalmente por Juan M Afán de Ribera.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
' accessvbafaq@ya.com
'
' Este código se brinda por cortesía de
' Juan M. Afán de Ribera
'
Function DeleteKeys(KeyCode As Integer, ParamArray Keys() As Variant) As Integer
Dim Key As Variant
For Each Key In Keys
If KeyCode = Key Then
KeyCode = 0
Exit Function
End If
Next
End Function
'---------------------------------------------------------
Créditos
con el fin de dar a conocer el trabajo de uno de los más grandes en el mundo de Access en español, y tras solicitar su permiso, replico este artículo de Juan M Afán de Ribera. Todos los derechos y autoría corresponden a él. Access & VBA FAQ – Anular la pulsación de teclas (archive.org)
Pregunta Sé cómo imprimir un informe mediante código y sé cómo hacer para que aparezca el cuadro de diálogo imprimir,…
Cómo conseguir en un informe calcular sólo el total para cada página