我有一个很久以前别人制作的 Word 2003 工具栏。该工具栏包含许多按钮和指定的宏。
到目前为止,我已经能够在 VBA 代码中设置断点,以便找出正在运行的宏,但对于工具栏中的一个按钮,我遇到了问题。似乎没有任何对应的宏。当我单击工具栏按钮时,Word 还显示“找不到宏...”)。我的断点查找策略似乎不是一个成功的概念。
我非常清楚这一点:工具菜单>自定义>右键单击特定工具栏按钮:
不幸的是,这对我没有帮助。我能以某种方式查看某个工具栏按钮的回调事件属性吗?我需要知道某个按钮要运行哪个宏。
答案1
打印出分配给任何菜单按钮的所有宏名称
Sub ReadBack_Buttons()
On Error Resume Next
'## Loop through every menu bar
For Each bar In Application.CommandBars
'## Loop through every button on the current menu bar
For Each button In bar.Controls
'## If a macro is assigned, print it out
If button.OnAction <> "" Then Debug.Print button.Caption & " = " & button.OnAction
'## Loop through every button on dropdown menus
For Each subbutton In button.Controls
'## If a macro is assigned, print it out
If subbutton.OnAction <> "" Then Debug.Print subbutton.Caption & " = " & subbutton.OnAction
Next
Next
Next
End Sub
为了进行快速测试,请使用第二个宏添加您自己的自定义菜单。
Sub CreateCommandBar()
On Error Resume Next
'## Delete the commandbar if it exists
Application.CommandBars("example").Delete
'## Create a new Command Bar
Set bar = CommandBars.Add(Name:="example", Position:=msoBarFloating)
bar.Visible = True
'## Add popup menu
Set menu1 = bar.Controls.Add(Type:=msoControlPopup)
menu1.Caption = "My custom menu"
'## Add button 1 to popup menu
Set Btn2 = menu1.Controls.Add(Type:=msoControlButton)
Btn2.Caption = "missing macro assigned"
Btn2.OnAction = "Not_working_dummy"
'## Add button 2 to popup menu
Set Btn2 = menu1.Controls.Add(Type:=msoControlButton)
Btn2.Caption = "Hello World"
Btn2.OnAction = "Hello_world"
End Sub
Sub Hello_world()
MsgBox "Hey, it works"
End Sub
执行后,CreateCommandBar
您将在主菜单上看到一个新条目。一个条目分配了工作宏,另一个条目没有
现在,运行第一个宏ReadBack_Buttons
并查看即时窗格
missing macro assigned = Not_working_dummy
Hello World = Hello_world