• ベストアンサー

VBAで、右クリックメニューの項目について

VBAでユーザー定義のショートカットメニューを作成し、表示(Caption)させます 例)上から、登録、保存、終了 OnActionでは全て同じマクロを指定します(OnAction="aaaa") マクロ"aaa"では、押されたメニューの名前をMsgBoxで表示したいのですが、この場合はどのようにすればよいのでしょうか? よろしければ教えていただけないでしょうか

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

  • ベストアンサー
回答No.3

> 上から、登録、保存、終了 Sub aaaa() MsgBox CommandBars("Cell").Controls. _ Item(Application.Caller(1)).Caption End Sub の1プログラムでいかがでしょうか。

jobvba
質問者

お礼

ユーザー定義のマクロだったので、("Cell")の部分を自分で作ったコマンドバーを指定したら出来ました ありがとうございました!

その他の回答 (2)

回答No.2

ボタンから呼び出すプロシージャを 3つとも別のものにして、そこから共通のプロシージャを呼び出すとか。 Public Sub aaaa(aButtonName As String) MsgBox aButtonName End Sub Public Sub AddClicked() Call aaaa("登録") End Sub Public Sub SaveClicked() Call aaaa("保存") End Sub Public Sub ExitClicked() Call aaaa("終了") End Sub

jobvba
質問者

お礼

他の方の回答により解決いたしました ありがとうございました!

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

実際では使ったことないが、3つぐらいなら Sub AddMenu() Dim Newb1 Set Newb1 = Application.CommandBars("Cell").Controls.Add() With Newb1 .Caption = "登録" .OnAction = "" .OnAction = "Sample1" .BeginGroup = False End With Dim Newb2 Set Newb2 = Application.CommandBars("Cell").Controls.Add() With Newb2 .Caption = "保存" .OnAction = "" .OnAction = "Sample2" .BeginGroup = False End With Dim Newb3 Set Newb3 = Application.CommandBars("Cell").Controls.Add() With Newb3 .Caption = "終了" .OnAction = "" .OnAction = "Sample3" .BeginGroup = False End With End Sub Sub Sample1() MsgBox "登録" End Sub Sub Sample2() MsgBox "保存" End Sub Sub Sample3() MsgBox "終了" End Sub 上記は、私の好みで、それぞれ別プロへ飛ぶようにしました。 .OnAction = "" は登録をクリアするために要りそうなので入れました。 3セットを1セットで記述する方法もありそうだが、配列などもつかえるかどうかわからないので、似たもの3回繰り返しました。 なお、間違って登録したものの削除が必要な場合は Sub test1() For i = 1 To 2 Application.CommandBars("cell").Controls(i).Delete Next i End Sub でできるようだか、0から開始かもしれない。 i は、現表示の何番目のメニューかを指定をすることになるようです。間違えないようにしないと、やり直しが効かないと思う。 一応テスト済み。

jobvba
質問者

お礼

他の方の回答により解決いたしました ありがとうございました!

関連するQ&A