если через параметр, то что-то очень сложно там, мне кажется можно аналогично моему:
Private Sub Workbook_Open()
With Application
On Error Resume Next
.CommandBars(.ThisWorkbook.Name).Delete
On Error GoTo 0
With .CommandBars.Add(.ThisWorkbook.Name, msoBarTop, False, True)
.Visible = True
With .Controls.Add(, , , , True)
.Caption = Application.ThisWorkbook.Name
.Style = msoButtonIconAndCaption
.OnAction = "CommonMacro"
.Tag = "macro"
.FaceId = 487
.parameter = "'" & ThisWorkbook.Name & "'!macro"
End With
End With
End With
End Sub
Sub macro()
MsgBox 1
End Sub
Sub CommonMacro()
Application.Run Application.CommandBars.ActionControl.parameter
End Sub
а можно и вообще не на параметр, а на имя меню повесить:
Application.CommandBars.ActionControl.parent.name