- ベストアンサー
右クリック時に押した所の名前を返す方法(VBA)
シート上で右クリックをしたときに本来のショートカットメニューを表示せず、ユーザー定義のメニューを表示させ、表示させる名前の一覧をエクセルのシートから50行ほど参照し、右クリック時のメニューに表示させるようにしました。 そこまではよかったのですが、通常であればバーに対してひとつずつマクロをすると思います。しかし今回やりたいことは、右クリックをした後に表示されるメニューで押したところの名前を、最初に右クリックした場所に文字列として入力するだけなので、なにかうまい方法があればと思い、質問いたしました。 よろしくお願いします
- みんなの回答 (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 '****** 標準モジュール *****************************************************************
その他の回答 (1)
- pauNed
- ベストアンサー率74% (129/173)
こんにちは。 >通常であればバーに対してひとつずつマクロをする の意味が少しわかりませんでした。 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
お礼
回答ありがとうございます 上記の方の回答により解決しました ご協力ありがとうございました
補足
>通常であればバーに対してひとつずつマクロをする 日本語の使い方を間違っていました。すいません訂正します。 右クリックしたときに出てくるショートカットメニューには、メニューひとつにたいしてひとつのマクロを登録、または作成すると思います。 シートから50行ほど読み込み、それをそのままドロップダウンリストのようにショートカットメニューに表示させました。 それに対して50個のマクロを登録するのは大変です。 今回はドロップダウンリストのように、右クリックで選んだ項目の名前をそのままセルに出したいので、50個のマクロを1個のマクロで記述できたらいいな、というものでした。 最初の質問方法だと意味が伝わりにくいようだったので、繰り返し申し訳ありませんでした
お礼
おかげさまで解決いたしました ありがとうございました!