- ベストアンサー
押されたキーでポップアップメニューを切り替える方法
- ワークシート上で右クリックにてポップアップメニューが表示されますが、Ctrl+右クリック、Shirf+右クリック、Alt+右クリックにて、独自のポップアップメニューを表示させようてしています。
- クラスモジュールを使用し、右クリックイベント内で押されたキーを判断して表示するメニューを切り替えることは可能です。
- 独自のポップアップメニューの追加や表示はすでにできています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Excelのみでは無理だと思います WinAPIのGetKeyboardState/GetKeyStateを使えばキーの状態を判断できます GetKeyboardStateは256個Byte型配列を準備して使います GetKeyStateは引数に調べたいキーの仮想キーコードを使います API宣言 ' 行頭のPrivateはクラス(シート)モジュールで宣言する場合です ' 標準モジュールで宣言するならPublicに変更しましょう Private Declare Function GetKeyboardState _ Lib "user32" (pbKeyState As Byte) As Long Private Declare Function GetKeyState _ Lib "user32" (ByVal nVirtKey As Long) As Integer Dim bVKBuf(255) as Byte 使い方 Sub M1() MsgBox "" GetKeyBoardState bVKBuf(0) dim n as integer for n = 1 to 256 Cells( n, 1) = bVKBuf( n-1 ) next ' bVKBuf(16)がShift、bVKBuf(17)がCtrl End Sub Sub M2() MsgBox "" dim nS as Integer, nC as Integer nS = GetKeyState( 16 ) ' Shift nC = GetKeyState( 17 ) ' Ctrl MsgBox nS & " , " & nC End Sub といった具合のコードで 最初のMSGBOXが表示された状態で『Shift』または『Ctrl』または両方を押しながら『OK』をクリックしてみてください M1ですと A17,A18が 128や129になれば Shift,Ctrlが押されています M2ですと -127,-128などと表示されます 前がShift、後ろがCtrlです 押されているかの判断は bS = ( nS and &h80 ) = &h80 bC = ( nC and &h80 ) = &h80 bS = ( bVKBuf(16) and &h80 ) = &h80 bC = ( bVKBuf(17) and &h80 ) = &h80 などとしたほうがわかりやすいかも … True/Falseで返ってきますから
お礼
回答ありがとうございます。 やはりAPIなしでは無理でしたか... 早速、下記の様に処理し解決いたしました。 bS = (GetKeyState(16) And &H80) = &H80 'Shift bC = (GetKeyState(17) And &H80) = &H80 'Ctrl bA = (GetKeyState(18) And &H80) = &H80 'Alt ご教授ありがとうございました。