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はビットフィールドになっています

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

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

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

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

Shift変数の値

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

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

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

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次