こじんてきメモ

趣味とか...(╹◡╹)

VBA KeyDownイベントを使ってみる

KeyDownイベントを使ってみます。

KeyDownイベントでは、キー入力が行われた際に、KeyCodeにそれぞれのキーに割り当てられた値が返されます。


とりあえず次のようにコードを書いて、
キーに割り当てられた値をメッセージボックスに出力してみます。

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
MsgBox KeyCode
End Sub

f:id:hmmr:20161117182244j:plain

しかしいちいちメッセージボックスが出てきて面倒なので

MsgBox KeyCode

の代わりに

Debug.Print KeyCode

とすると楽ですね。

f:id:hmmr:20161117182700j:plain

そういうわけでデバッグプリントで手元のキーボードを調べてみました。
---------------------------

■テンキー回り
Enter 13
0 96
1 97
2 98
3 99
4 100
5 101
6 102
7 103
8 104
9 105
* 106
+ 107
- 109
. 110
/ 111
NumLock 144
■文字列
A 65
B 66
C 67
D 68
E 69
F 70
G 71
H 72
I 73
J 74
K 75
L 76
M 77
N 78
O 79
P 80
Q 81
R 82
S 83
T 84
U 85
V 86
W 87
X 88
Y 89
Z 90
------------
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
------------
- 189
^ 222
\ 220
@ 192
[ 219
; 187
: 186
] 221
, 188
. 190
/ 191
\ 226

 

■Functionキー
F1 112
F2 113
F3 114
F4 115
F5 116
F6 117
F7 118
F8 119
F9 120
F10 121
F11 122
F12 123

 

■方向キー
← 37
↑ 38
→ 39
↓ 40

 

■それ以外
半角/全角 229
Tab 9
CapsLock 229
Shift 16
Ctrl 17
Windowsキー 91
Alt 18
無変換 29
Space 32
変換 229
カタカナ/ひらがな 229
コンテキストメニューキー 93
PrintScreen 42
ScrollLock 145
Pause/Break 19
PageUp 33
PageDown 34
End 35
Home 36
Insert 45
Delete 46

↓簡易な表にしたもの。センスがないのは...まぁ...

f:id:hmmr:20161117175734p:plain

今回はKeyDownイベントを使いましたが、似たようなイベントにKeyPressイベントがあります。KeyPressでも似たように値を返すのですが、だからといってKeyDownと同じ値は使えません。

例えばKeyDownでは「A」は「65」を返しますが、KeyPressでは「97」を返します。というかそもそもKeyPressの場合はKeyDownではなくKeyAsciiです。

とりあえず今回はKeyDownイベントのお話ということでここまで

 

追記

これらのKeyCodeはここにすべて記載されている。

 https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/character-set-0127

https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/character-set-128255