プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (3件)

> 上から、登録、保存、終了



Sub aaaa()
MsgBox CommandBars("Cell").Controls. _
Item(Application.Caller(1)).Caption
End Sub

の1プログラムでいかがでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/29 22:58

ボタンから呼び出すプロシージャを 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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/29 22:59

実際では使ったことないが、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 は、現表示の何番目のメニューかを指定をすることになるようです。間違えないようにしないと、やり直しが効かないと思う。
一応テスト済み。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/29 23:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!