シート上で右クリックをしたときに本来のショートカットメニューを表示せず、ユーザー定義のメニューを表示させ、表示させる名前の一覧をエクセルのシートから50行ほど参照し、右クリック時のメニューに表示させるようにしました。
そこまではよかったのですが、通常であればバーに対してひとつずつマクロをすると思います。しかし今回やりたいことは、右クリックをした後に表示されるメニューで押したところの名前を、最初に右クリックした場所に文字列として入力するだけなので、なにかうまい方法があればと思い、質問いたしました。
よろしくお願いします
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
'****** 標準モジュール *****************************************************************
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
この回答への補足
>通常であればバーに対してひとつずつマクロをする
日本語の使い方を間違っていました。すいません訂正します。
右クリックしたときに出てくるショートカットメニューには、メニューひとつにたいしてひとつのマクロを登録、または作成すると思います。
シートから50行ほど読み込み、それをそのままドロップダウンリストのようにショートカットメニューに表示させました。
それに対して50個のマクロを登録するのは大変です。
今回はドロップダウンリストのように、右クリックで選んだ項目の名前をそのままセルに出したいので、50個のマクロを1個のマクロで記述できたらいいな、というものでした。
最初の質問方法だと意味が伝わりにくいようだったので、繰り返し申し訳ありませんでした
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで「クエリと接続」の画面を出せますか? 2 2022/10/24 13:35
- その他(Microsoft Office) Microsoft Edgeの「ニュースと関心事項」についてお聞きします。 3 2023/05/22 12:08
- ノートパソコン Onlineエクセルで右クリックが使えない 1 2023/07/01 22:07
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- Windows Me・NT・2000 IMEオプションが開かない 2 2023/04/07 18:04
- gooブログ ブログの記事を書きだしのみに表示したい 1 2022/06/25 19:11
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/04/21 13:46
- Windows 10 Google日本語入力について 3 2022/10/20 15:51
- Excel(エクセル) [貼り付けオプション]とは? 3 2022/04/17 08:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでシートモジュール...
-
Excel VBA 『Call』で呼び出す...
-
VBA This Workbookモジュール...
-
Excel VBAでリンク切れをチェッ...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとクラスの違いって...
-
VBでグローバル変数を宣言するには
-
VBAで別モジュールへの変数の受...
-
【vba】フォームに書いてあ...
-
グラフのX,Y座標を取得したい
-
VBA モジュールで共通に使う変...
-
Excel VBAで、ユーザーフォーム...
-
複数のフォーム間での変数宣言
-
ユーザー定義関数をEXCELに常駐...
-
Excelで時刻になったら知らせて...
-
エクセルVBA クラスモジュール...
-
モジュールとは何ですか
-
Excel VBA 定義されたプロージ...
-
モジュールからフォームのボタ...
-
VB2005ーDataGridViewの選択さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
モジュールとは何ですか
-
VBA This Workbookモジュール...
-
VBでグローバル変数を宣言するには
-
グラフのX,Y座標を取得したい
-
モジュールの最大数はいくつな...
-
【vba】フォームに書いてあ...
-
VBAで旧字体を異字体に一括で変...
-
Excel VBAで、ユーザーフォーム...
-
Form間の値の渡し方
-
モジュールとクラスの違いって...
-
Access VBA標準モジュールにつ...
-
本当にPublicな変数(配列で)
-
標準モジュールを削除したい。(...
おすすめ情報