2015-11-26 2 views

ответ

5

Вы должны использовать KeyPress событие вместо Change события:

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 

Полный список кодов клавиш вы можете найти здесь: http://www.asciitable.com/

2

Этот пример правопреемников «InsertProc» в последовательность клавиш CTRL + PLUS SIGN и назначает «SpecialPrintProc» последовательности клавиш SHIFT + CTRL + RIGHT ARROW.

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

другие примеры и Infos дальше: https://msdn.microsoft.com/en-us/library/office/aa195807%28v=office.11%29.aspx

2

Вы должны использовать KeyPress событие вместо:

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 

И вы можете использовать KeyAscii = 0, чтобы отменить ключ, который был введен!

Найти список всех значений ASCii здесь http://www.asciitable.com/

3
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 
Смежные вопросы