リアルタイムキースキャン
以下の宣言を書くとVBA中でGetAsyncKeyState(キーコード)という関数が使えるようになる。
Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long
残念ながらエクセルとエクセルマクロ(VBA)の基本機能だけでは、どのボタンが押されているかを調べる機能はありません。
http://www.happy2-island.com/excelsmile/smile04/capter00301.shtml
キーボードのどのボタンが押されているかを調べるときは、User32.dllというライブラリの中にあるGetAsyncKeyStateという関数を使って調べます。
DeclareはDLLの中にある関数を呼び出すときに付ける物で、Functionは関数の宣言。次が関数名GetAsyncKeyStateとLibが関数の居場所で、この関数のときはUser32.dllを指定します。なお、この関数の戻り値はLong型です。
GetAsyncKeyStateは、引数へ目的のキーの番号を設定し呼び出し、戻り値からキーの状態を調べます。引数で指定した番号のキーが押されている間は0以外、押されていないときは0が関数の戻り値に返ってきます。もちろん、一度に複数のキーを押しても、それぞれを判断できます。
VBAはこういう機能があってうらやましい。
VBSでも出来ないかなと思ったら、DynaCallというものをインストールする必要があるようだ。