Access

ACCESS VBAでファンクションキーを割り当てる

ファンクションキー
記事内に商品プロモーションを含む場合があります

コマンドボタンクリックではなく、ファンクションキーを押下することで処理を実行したいことがあります。

マウスでコマンドボタンまでカーソルを移動してクリックする数秒を考えると、ボタン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はビットフィールドになっています

補助キー ビット 定数
なし なし
Shiftキー 1 acShiftMask
Ctrlキー acCtrlMask
Altキー acAltMask

これらのキーを組み合わせる(合計する)ことにより、複数のキーの組み合わせも判断できます。

複合キーの組み合わせは0を含めて全部で8通りになります。

先のサンプルプログラムではShift変数の8通りのCASEを全て(0~7まで)記述しています。

定数が用意されていますので、CASE文には数値ではなく【acShiftMask+acCtrlMask】のように記述してもOKです。

このように補助キーを組み合わせて入力されたキーを取得できますので、隠しコマンドを記述することもできますね。

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。