Ollie
Ollie

Reputation: 337

How to detect if a specific key was pressed?

I'm wondering is there a way to detect if a specific key (like backspace) was pressed. This is what I'm shooting for:

Private Sub SomeTextBox_Change()

    If len(Me.SomeTextBox.Value) = 3 and KEYPRESSED is NOT BACKSPACE Then
         <.......Code Here>
    Else
         <.......Code Here>
    End if

End Sub

Upvotes: 5

Views: 34306

Answers (4)

PASUMPON V N
PASUMPON V N

Reputation: 1186

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode.Value = vbKeyF1 Then
       MsgBox "F1 is pressed"
    End If
End Sub

Upvotes: 5

R3uK
R3uK

Reputation: 14537

You should use KeyPress event instead :

Private Sub SomeTextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If Len(Me.SomeTextBox.Value) = 3 And KeyAscii <> vbKeyBack Then
     '<.......Code Here>
Else
     '<.......Code Here>
End If

End Sub

And you can use KeyAscii = 0 to cancel the key that was entered!

Find a list of all Ascii values here http://www.asciitable.com/

Upvotes: 4

xs6
xs6

Reputation: 890

This example assigns "InsertProc" to the key sequence CTRL+PLUS SIGN and assigns "SpecialPrintProc" to the key sequence SHIFT+CTRL+RIGHT ARROW.

Application.OnKey "^{+}", "InsertProc" 
Application.OnKey "+^{RIGHT}","SpecialPrintProc"

for more examples and infos go on : https://msdn.microsoft.com/en-us/library/office/aa195807%28v=office.11%29.aspx

Upvotes: 5

mielk
mielk

Reputation: 3940

You should use KeyPress event instead of Change event:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    If Len(Me.SomeTextBox.Value) = 3 And KeyAscii <> 8 Then 'Backspace has keycode = 8.
         <.......Code Here>
    Else
         <.......Code Here>
    End If

End Sub

Full list of keycodes you can find here: http://www.asciitable.com/

Upvotes: 8

Related Questions