• ベストアンサー

右クリック時に押した所の名前を返す方法(VBA)

シート上で右クリックをしたときに本来のショートカットメニューを表示せず、ユーザー定義のメニューを表示させ、表示させる名前の一覧をエクセルのシートから50行ほど参照し、右クリック時のメニューに表示させるようにしました。 そこまではよかったのですが、通常であればバーに対してひとつずつマクロをすると思います。しかし今回やりたいことは、右クリックをした後に表示されるメニューで押したところの名前を、最初に右クリックした場所に文字列として入力するだけなので、なにかうまい方法があればと思い、質問いたしました。 よろしくお願いします

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

意味が違うかも知れませんが、、、 Sheet2の A1から下にポップアップするリストがあるとして Sheet1のシートモジュールと標準モジュールに下記を転記して実行するとそれっぽくなりますが、、、 '****** シートモジュール *************************************************************** Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim myPopup As Variant, i As Long  Cancel = True  Set myPopup = CommandBars.Add(Position:=msoBarPopup, Temporary:=True)  For i = 1 To Worksheets("Sheet2").Range("A65536").End(xlUp).Row    With myPopup.Controls.Add       .Caption = Worksheets("Sheet2").Range("A" & i).Value       .OnAction = "PopupAdd"       .FaceId = 31    End With  Next i   myPopup.ShowPopup End Sub '****** シートモジュール *************************************************************** '****** 標準モジュール ***************************************************************** Sub Popupadd() Dim i As Long  If IsArray(Application.Caller) Then    i = Application.Caller(1)    ActiveCell.Value = Worksheets("Sheet2").Range("A" & i).Value  End If End Sub '****** 標準モジュール *****************************************************************

jobvba
質問者

お礼

おかげさまで解決いたしました ありがとうございました!

その他の回答 (1)

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。 >通常であればバーに対してひとつずつマクロをする の意味が少しわかりませんでした。 CommandBars("Cell")に対して処理をするという事ではなく? とりあえず別の案として、特定のBook/Sheetに対する処理であれば ThisWorkbookモジュールのSheetBeforeRightClickイベント、もしくは SheetモジュールのBeforeRightClickイベントについて調べてみられてはいかがでしょう。 【例】 Private Sub Workbook_SheetBeforeRightClick _     (ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)   If Target.Count = 1 Then     MsgBox Target.Value 'Address(0, 0)     Cancel = True   End If End Sub

jobvba
質問者

お礼

回答ありがとうございます 上記の方の回答により解決しました ご協力ありがとうございました

jobvba
質問者

補足

>通常であればバーに対してひとつずつマクロをする 日本語の使い方を間違っていました。すいません訂正します。 右クリックしたときに出てくるショートカットメニューには、メニューひとつにたいしてひとつのマクロを登録、または作成すると思います。 シートから50行ほど読み込み、それをそのままドロップダウンリストのようにショートカットメニューに表示させました。 それに対して50個のマクロを登録するのは大変です。 今回はドロップダウンリストのように、右クリックで選んだ項目の名前をそのままセルに出したいので、50個のマクロを1個のマクロで記述できたらいいな、というものでした。 最初の質問方法だと意味が伝わりにくいようだったので、繰り返し申し訳ありませんでした