VBA を使ってテキストボックスやボタンなどのキーボード入力イベントである KeyDown と KeyPress イベントの違いや発生順序について、このページでは掲載しています。
スポンサーリンク
イベントの発生順序
KeyDown イベントと KeyPress イベントの発生順序を以下のスクリプトを使って確認したところ、
- KeyDown イベント
- KeyPress イベント
となりました。
Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Debug.Print "KeyDown" If (KeyCode = vbKeyReturn) Then Debug.Print ("エンターキーが押された") End If ' シフトキーが押されているときは 1 となる。 If (Shift = 1) Then If (KeyCode = vbKeyShift) Then Debug.Print ("シフトキーだけ押された") Else Debug.Print ("シフトキーも一緒に押された") End If End If End Sub Private Sub CommandButton1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Debug.Print "KeyPress" End Sub
KeyDown:キーボードが押され始めたが、まだ押されたとは判断できない状態
KeyPress:キーが押されたと判断された状態
といったところでしょうか?
イベントの発生条件
キー入力イベントが発生する条件は、KeyDown と KeyPress イベントでは異なります。
KeyDown イベントは、どのキーでもイベントが発生します。英数字や F1 ~ F10 のようなファンクションキーなど全てのキーでイベントが発生します。
一方の KeyPress イベントは英数字などのアスキーコードのみで発生するイベントです。シフトキーやファンクションシーなどの制御文字のキー入力ではイベントが発生しません。
KeyDown イベントではパラメーターが KeyCode なのに対して、KeyPress イベントではパラメータは KeyAscii であることからもわかります。
パラメータ名もちゃんと考えられています。見習いたいものです。