How to intercept the user pressing a particular keyboard key when a UserForm control has the focus
Article contributed by Ibby and Dave Rado
If a you want to know if the user presses the Tab key or the Backspace key in a text box, for example; or the Down Arrow key in a Listbox or on an Option button, you can use code such as the following:
Private Sub
OptionButton1_KeyDown(ByVal
KeyCode As _
MSForms.ReturnInteger,
ByVal Shift As Integer)
If KeyCode = wdKeyTab Then
'Your code here
End If
End Sub
There are wdKey constants for most, but not all, of the KeyCodes you are likely to want to use; to get the full list of the constants, press F2 to open the Object Browser and search for wdKey.
So for example, there is a constant for the backspace key:
Private Sub TextBox1_KeyDown(ByVal
KeyCode As _
MSForms.ReturnInteger,
ByVal Shift As Integer)
If KeyCode = wdKeyBackspace Then
'Your code here
End If
End Sub
But for some strange reason, there is no constant for the Down Arrow key. To get the value to use for KeyCodes that have no constant, use code such as the following:
Private Sub ListBox1_KeyDown(ByVal
KeyCode As _
MSForms.ReturnInteger,
ByVal Shift As Integer)
MsgBox KeyCode
End Sub
If you do that, click the Listbox and press the Down Arrow key, it returns 40; so you can then use:
Private Sub ListBox1_KeyDown(ByVal
KeyCode As _
MSForms.ReturnInteger,
ByVal Shift As Integer)
If KeyCode = 40 Then
'Down Arrow key was pressed
'Your code here
End If
End Sub