Cómo obtener información del teclado en VBA
29.4.2 Obtener mensajes del teclado
En VBA, no existe ninguna función para obtener el estado del teclado. Si necesita consultar el estado del teclado en el programa, puede escribir código para llamar al seccionador de funciones API para lograrlo.
1. Función GetKeyState
Utilice esta función para obtener el estado de la tecla de bloqueo del teclado. El prototipo de la función es el siguiente:
Función de declaración pública GetKeyState Lib.
"user32" (ByVal nVirtKey As Long) As Integer
El parámetro nVirtKey es la constante de la clave cuyo estado se desea obtener. En VBA, cada tecla tiene una constante correspondiente; por ejemplo, la constante de la tecla CapsLock es vbKeyCapital.
El valor de retorno de esta función es un valor entero. Si el bit más bajo es 1, significa que la tecla de bloqueo está activada, por lo que puede usar el siguiente código para juzgar:
>CBool(GetKeyState( vbKeyCapital) And 1)
El valor de retorno de la función GetKeyState se suma lógicamente con el entero 1 para obtener el bit más bajo del valor de retorno y luego se convierte en un valor lógico mediante el Función CBool para obtener la contraseña de bloqueo especificada. El estado de la clave bloqueada especificada.
2. Función GetKeyboardState y función SetKeyboardState
Para establecer el estado de las teclas bloqueadas, es necesario utilizar la función GetKeyboardState y la función SetKeyboardState. Ambas funciones utilizan un búfer de 256 bytes para obtener o establecer configuraciones de 256 claves. Una matriz de bytes que contiene 256 elementos se configura como un búfer en VBA, que registra el estado del teclado, y la posición de cada tecla en la matriz está determinada por VK_constant.
Una vez que haya obtenido el estado de una tecla del teclado y lo haya almacenado en un búfer usando la función GetKeyboardState, puede modificar una configuración de tecla específica y luego usar la función SetKeyboardState para guardar la configuración nuevamente con el propósito de modificando la configuración de la clave.
La función GetKeyboardState se utiliza para obtener el estado actual de cada tecla virtual del teclado. El prototipo de la función es el siguiente:
Declarar la función GetKeyboardState
. Lib "user32" alias "GetKeyboardState " _
(pbKeyState As Byte) As Long
El parámetro pbKeyState es el primer elemento de una matriz de bytes que contiene 256 elementos.
Si la función devuelve un valor distinto de cero en caso de éxito, devuelve cero en caso de error.
La función SetKeyboardState se utiliza para establecer el estado actual de cada tecla virtual en el teclado. Su formato de declaración es el siguiente:
Declarar función SetKeyboardState Lib
. "user32" Alias " SetKeyboardState " _
(lppbKeyState As Byte) As Long
Después de comprender las funciones que configuran el estado del teclado, puede escribir código en VBA para configurar el Estado de las llaves bloqueadas. Los pasos específicos son los siguientes:
(1) En Excel, presione la tecla de método abreviado Alt F11 para ingresar a VBE.
(2) Haga clic en el comando del menú Insertar | Módulo para insertar el cuerpo del módulo en el proyecto.
(3) Pegue la definición de la función API en la parte de declaración del módulo, como se muestra a continuación:
Función de declaración pública GetKeyState Lib
"user32 " (ByVal nVirtKey As Long) Como entero
Función de declaración pública GetKeyboardState
Lib "user32" (pbKeyState As Byte) AsLong
Función de declaración pública SetKeyboardState p>
Lib "user32" (lppbKeyState As Byte) As Long
(4) Utilice el siguiente código para escribir una subrutina general para modificar el estado de la clave bloqueada:
Sub SetKeyState(intVKey As Integer, bState As Boolean) 'Modifica el estado del teclado
Dim aBuffer(0 To 255) As Byte 'Define la matriz como un buffer
GetKeyboardState aBuffer(0) 'Guardar el estado del teclado Ingresar el búfer
aBuffer(intVKey) = CByte(Abs(bState)) 'Modificar el estado de la clave especificada en el búfer Modificar el estado de la clave especificada en el búfer p>
SetKeyboardState aBuffer(0 ) 'Usa el buffer para modificar el estado de la clave
End Sub
El programa usa el primer elemento del array como parámetro para pasar a las dos funciones API Dado que la matriz se almacena continuamente en VBA, las funciones API pueden acceder a todos los elementos posteriores utilizando la dirección del primer elemento.
(5) La función general SetKeyState le permite escribir fácilmente código que modifica el estado de la clave de bloqueo. Por ejemplo, el siguiente código modifica el estado de la tecla Bloq Mayús (alterna entre mayúsculas y minúsculas):
Sub ModiCapsLock() 'CapsLock
If CBool(GetKeyState(vbKeyCapital) And 1 )
Luego 'Obtener el estado original de Bloq Mayús
SetKeyState vbKeyCapital, False 'Cerrar
Else
SetKeyState vbKeyCapital, True 'Abrir< / p>
End If
End Sub
El programa primero usa la función GetKeyState para consultar el estado original de CapsLock y luego cambia su estado (es decir, cierra CapsLock) . e., si originalmente estaba abierto, entonces cerrar; si originalmente estaba cerrado, entonces abrir).