Home >> ヒント・サンプル集 >> プログラムサンプル >> (VBA[関数] 実行時、特定のキーが押されていたかを返す

<VBA> [関数] 実行時、特定のキーが押されていたかを返す
シフトキーを押しながらボタンをクリックしたら・・・の様なオプション機能を実現することができます

Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer 
Public Function saChkKey(vKey As Long, Optional vKey2)
    Dim Rsp As Integer
    Rsp = GetAsyncKeyState(vKey)
    If (Rsp And &H8000) = &H8000 Then
        If IsMissing(vKey2) = False Then
            Rsp = GetAsyncKeyState(vKey2)
            If (Rsp And &H8000) = &H8000 Then
                saChkKey = True
            Else
                saChkKey = False
            End If
        Else
            saChkKey = True
        End If
    Else
        saChkKey = False
    End If
End Function


WinAPI "GetAsyncKeyState" を使用します
上記コードをModuleに貼り付けます

【引数】
・押されていたキーのV_Keyです
 MicrosoftのホームページのVirtual-Key Codesを参照してください
(https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx)

【サンプル】
ボタンクリックイベント等にて、Shiftキーが押されていたかの確認方法
(Shiftキーの場合は、引数が&h10です)

if saChkKey(&h10) = True then
 msgbox "Shiftキーが押されています"
else
 msgbox "Shiftキーは押されていません"
end if

と使用します
ShiftキーとCtrlキーの両方(2つのキー)が押されているのを確認したい場合は、
if saChkKey(&h10,&h11) = True then
 msgbox "ShiftキーとCtrlキーが押されています"
else
 msgbox "ShiftキーとCtrlキーは押されていません"
end if

となります。
3つのキーを同時に・・・の場合は、プログラムの修正が必要です。
プログラムをよく読むとわかると思いますので、ご自身で修正してください

  お気軽にご相談ください お問合せ・ご相談はこちら お問合せ・ご相談はこちら  
更新日:2017/02/21 18:31