コマンドボタンクリックではなく、ファンクションキーを押下することで処理を実行したいことがあります。
マウスでコマンドボタンまでカーソルを移動してクリックする数秒を考えると、ボタン1つ押下するだけで処理が実行できた方が効率的です。
今回はVBAでファンクションキー押下時の処理を制御する方法をご紹介します。
各入力項目はENTERキーまたはTABキーで移動できるように設計するほうが入力項目の多いフォームの場合、断然効率的です。
タブキーの移動順は大変重要ですのでフォームが完成したらタブキーで入力したい順番通りにフォーカスが移動することを確認しましょう。
ACCESSのキー定数
まずはAccessでキー割り当てによく使う定数を確認します。
数字やアルファベットなどの入力にもそれぞれキー定数が割り当てられています。
キー | 定数 |
F1キー ~ F16キー | vbKeyF1 ~ vbKeyF16 |
A ~ Z | vbKeyA ~ vbKeyZ |
0 ~ 9 | vbKey0 ~ vbKey9 |
[テンキー] 0 ~ 9 | vbKeyNumpad0 ~ vbKeyNumpad9 |
マウスの左ボタン | vbKeyLButton |
マウスの右ボタン | vbKeyRButton |
マウスの中央ボタン | vbKeyMButton |
Cancelキー | vbKeyCancel |
BackSpaceキー | vbKeyBack |
Tabキー | vbKeyTab |
Clearキー | vbKeyClear |
Enterキー | vbKeyReturn |
Shiftキー | vbKeyShift |
Ctrlキー | vbKeyControl |
Menuキー | vbKeyMenu |
Pauseキー | vbKeyPause |
CapsLockキー | vbKeyCapital |
Escキー | vbKeyEscape |
Spaceキー | vbKeySpace |
PageUpキー | vbKeyPageUp |
PageDownキー | vbKeyPageDown |
Endキー | vbKeyEnd |
Homeキー | vbKeyHome |
← | vbKeyLeft |
↑ | vbKeyUp |
→ | vbKeyRight |
↓ | vbKeyDown |
Selectキー | vbKeySelect |
PrintScreenキー | vbKeyPrint |
Executeキー | vbKeyExecute |
Snapshotキー | vbKeySnapshot |
Insキー | vbKeyInsert |
Delキー | vbKeyDelete |
Helpキー | vbKeyHelp |
NumLockキー | vbKeyNumlock |
*(乗算記号) | vbKeyMultiply |
+(加算記号) | vbKeyAdd |
Enterキー(テンキー) | vbKeySeparator |
-(減算記号) | vbKeySubtract |
.(小数点記号) | vbKeyDecimal |
/(除算記号) | vbKeyDivide |
フォームのキーイベント取得プロパティをONにする
VBAでキーイベントの処理を記載しているのにキー押下に反応しない場合は、フォームのプロパティ【キーイベント取得】が「いいえ」になっていないか確認してください。
このプロパティが「はい」になっていないと、キークリック時イベントに処理を記載していても動作しません。

ファンクションキーイベントを取得する
以下はF2~F12までのキー押下イベントでそれぞれのメッセージを表示するサンプルプログラムです。
KeyDownイベントの引数KeyCodeをファンクションキーイベントの定数と比較して処理を記述します。
処理したいファンクションキーが1つや2つならIF文で処理してもOKです。
数が多ければSELECT CASE文で処理してください。
尚、F1キーにはAccessのヘルプが割り当てられているので通常は使用しません。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF2:
MsgBox "F2キー押下"
Case vbKeyF3:
MsgBox "F3キー押下"
Case vbKeyF4:
MsgBox "F4キー押下"
Case vbKeyF5:
MsgBox "F5キー押下"
Case vbKeyF6:
MsgBox "F6キー押下"
Case vbKeyF7:
MsgBox "F7キー押下"
Case vbKeyF8:
MsgBox "F8キー押下"
Case vbKeyF9:
MsgBox "F9キー押下"
Case vbKeyF10:
MsgBox "F10キー押下"
Case vbKeyF11:
MsgBox "F11キー押下"
Case vbKeyF12:
MsgBox "F12キー押下"
End Select
End Sub
補助キーとの組み合わせでイベントを取得する
KeyDownイベントではKeyCodeの他にもう一つ引数を持っています。
Shift変数です。この変数で「Shift」「Ctrl」「Alt」などの補助キーが同時に押下されているかどうかを判断できます。
以下のサンプルプログラムではF5キーの押下処理で、全ての補助キーの組み合わせでメッセージを出し分けるようにしています。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF2:
MsgBox "F2キー押下"
Case vbKeyF3:
MsgBox "F3キー押下"
Case vbKeyF4:
MsgBox "F4キー押下"
Case vbKeyF5:
Select Case Shift
Case 0:
MsgBox "F5キー単独押下"
Case 1
MsgBox "SHIFT+F5キー押下"
Case 2
MsgBox "CTRL+F5キー押下"
Case 3
MsgBox "SHIFT+CTRL+F5キー押下"
Case 4
MsgBox "ALT+F5キー押下"
Case 5
MsgBox "SHIFT+CTRL+F5キー押下"
Case 6
MsgBox "CTRL+ALT+F5キー押下"
Case 7
MsgBox "SHIFT+CTRL+ALT+F5キー押下"
End Select
Case vbKeyF6:
MsgBox "F6キー押下"
Case vbKeyF7:
MsgBox "F7キー押下"
Case vbKeyF8:
MsgBox "F8キー押下"
Case vbKeyF9:
MsgBox "F9キー押下"
Case vbKeyF10:
MsgBox "F10キー押下"
Case vbKeyF11:
MsgBox "F11キー押下"
Case vbKeyF12:
MsgBox "F12キー押下"
End Select
End Sub
引数Shiftはビットフィールドになっています。
補助キー | ビット | 定数 |
なし | 0 | なし |
Shiftキー | 1 | acShiftMask |
Ctrlキー | 2 | acCtrlMask |
Altキー | 4 | acAltMask |
これらのキーを組み合わせる(合計する)ことにより、複数のキーの組み合わせも判断できます。
複合キーの組み合わせは0を含めて全部で8通りになります。
先のサンプルプログラムではShift変数の8通りのCASEを全て(0~7まで)記述しています。
(例)SHIFT+Ctrl = 1 + 2 = 3
定数が用意されていますので、CASE文には数値ではなく【acShiftMask+acCtrlMask】のように記述してもOKです。
このように補助キーを組み合わせて入力されたキーを取得できますので、隠しコマンドを記述することもできますね。
コメント