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

当ページのリンクには広告が含まれています。
ファンクションキー
  • URLをコピーしました!

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

マウスでコマンドボタンまでカーソルを移動してクリックする数秒を考えると、ボタン1つ押下するだけで処理が実行できた方が効率的です。

今回はVBAでファンクションキー押下時の処理を制御する方法をご紹介します。

各入力項目はENTERキーまたはTABキーで移動できるように設計するほうが入力項目の多いフォームの場合、断然効率的です。
タブキーの移動順は大変重要ですのでフォームが完成したらタブキーで入力したい順番通りにフォーカスが移動することを確認しましょう。

目次

ACCESSのキー定数

まずはAccessでキー割り当てによく使う定数を確認します。
数字やアルファベットなどの入力にもそれぞれキー定数が割り当てられています。

キー定数
F1キー ~ F16キーvbKeyF1 ~ vbKeyF16
A ~ ZvbKeyA ~ vbKeyZ
0 ~ 9vbKey0 ~ vbKey9
[テンキー] 0 ~ 9vbKeyNumpad0 ~ 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キー1acShiftMask
Ctrlキー2acCtrlMask
Altキー4acAltMask

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

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

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

Shift変数の値

(例)SHIFT+Ctrl = 1 + 2 = 3

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

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

📚 Access VBAをもっと使いこなしたい方へ

「この処理もVBAでできないかな?」と思ったときに、やりたいことから引ける1冊です。Microsoft 365にも対応していて、載っているコードはダウンロードしてそのまま使えます。

\楽天ポイント4倍セール!/
楽天市場
\商品券4%還元!/
Yahooショッピング
目次