• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:押されたキーにてポップアップメニューを切り替える)

押されたキーでポップアップメニューを切り替える方法

このQ&Aのポイント
  • ワークシート上で右クリックにてポップアップメニューが表示されますが、Ctrl+右クリック、Shirf+右クリック、Alt+右クリックにて、独自のポップアップメニューを表示させようてしています。
  • クラスモジュールを使用し、右クリックイベント内で押されたキーを判断して表示するメニューを切り替えることは可能です。
  • 独自のポップアップメニューの追加や表示はすでにできています。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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で返ってきますから

yabe440
質問者

お礼

回答ありがとうございます。 やはりAPIなしでは無理でしたか... 早速、下記の様に処理し解決いたしました。 bS = (GetKeyState(16) And &H80) = &H80 'Shift bC = (GetKeyState(17) And &H80) = &H80 'Ctrl bA = (GetKeyState(18) And &H80) = &H80 'Alt ご教授ありがとうございました。

関連するQ&A