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のヘルプが割り当てられているので通常は使用しません。

補助キーとの組み合わせでイベントを取得する

KeyDownイベントではKeyCodeの他にもう一つ引数を持っています。

Shift変数です。この変数で「Shift」「Ctrl」「Alt」などの補助キーが同時に押下されているかどうかを判断できます。

以下のサンプルプログラムではF5キーの押下処理で、全ての補助キーの組み合わせでメッセージを出し分けるようにしています。

引数Shiftはビットフィールドになっています

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

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

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

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

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

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

ABOUT ME
アズビーパートナーズ
アズビーパートナーズ
プログラマーと社内SEとしての経験を活かして、 情報システム部門のご相談を承ります。 得意な分野はAccessによる短納期開発、 BIツール(QlikSense/QlikView)の開発です。 現在はCMSを利用したホームページの作成にも力を入れています。