#633 テキストボックスの指定キー入力でアクションを起こすには? フォーム、VBA

テキストボックスの「KeyDown/キークリック時」「KeyPress/キー入力時」イベントは、キーボードのキーが何か1つ押されるたびに発生するイベントです。これを利用すると、連続して任意の文字を入力していく過程で、ある特定のキーが押されたときに何らかのアクションを起こすことができます。

たとえば、次のようなデザインのフォームがあったとします。


ここにある「販売単価」のテキストボックスで、「Home」キーもしくは「C(c)」キーが押されたとき、別途用意されたオリジナルの電卓のダイアログを表示させるようなインタフェースを設けたいとします。

そのようなとき、次のようなイベントプロシージャを書きます。

Private Sub 販売単価_KeyDown(KeyCode As Integer, Shift As Integer)
'販売単価テキストボックスのキークリック時(特殊なキーの場合)

  If KeyCode = vbKeyHome Then
    '入力されたキーの本来の機能を無効にする
    KeyCode = 0
    'Homeキーでダイアログを表示
    DoCmd.OpenForm "fdlgCalculator", , , , , acDialog
  End If

End Sub

Private Sub 販売単価_KeyPress(KeyAscii As Integer)
'販売単価テキストボックスのキー入力時(一般的な文字の場合)

  If KeyAscii = Asc("c") Or KeyAscii = Asc("C") Then
    '入力されたキーの本来の機能を無効にする
    KeyAscii = 0
    'Homeキーでダイアログを表示
    DoCmd.OpenForm "fdlgCalculator", , , , , acDialog
  End If

End Sub


ここで、「KeyDown」と「KeyPress」の2つのイベントは似ていますが、引数が異なります。
  • 「KeyDown」はキーコードを引数としていますので、「Home」や「PageUp」等、あるいはファクションキーなどの入力データそのものではない特殊なキーインを検出することができます。

  • さらに引数の「Shift」を調べることで、そのキーといっしょに「Shift」・「Ctrl」・「Alt」のキーが押されていたかどうかを検出することができます。ですので、「Shift+F1」や「Ctrl+Home」といった組み合わせてのキーインに応じて何らかのアクションを起こすことができます。

  • 一方、「KeyPress」は入力された文字のASCIIコードを引数としています。数字や文字など、データそのものの入力に対応して発生します。

なお、今回の「Home」キーもしくは「C(c)」キーというケースでは、下記のようにすべてを「KeyDown」イベントプロシージャで処理することができます。今回は用例として2つに分けましたが、通常はこのようにまとめた方がよいかもしれません。

Private Sub 販売単価_KeyDown(KeyCode As Integer, Shift As Integer)
'販売単価テキストボックスのキークリック時

  If KeyCode = vbKeyHome Or KeyCode = Asc("c") Or KeyCode = Asc("C") Then
    '入力されたキーの本来の機能を無効にする
    KeyCode = 0
    'Homeキーでダイアログを表示
    DoCmd.OpenForm "fdlgCalculator", , , , , acDialog
  End If

End Sub


実行例:
販売単価のテキストボックスの入力中に「C」キーを押す


※「KeyAscii = 0」というコードによって、入力されたキーの本来の機能を無効にしていますので、「C」という文字自体はテキストボックスには入力されません。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved