如何知道哪个宏被分配给 Word 2003 中的某个工具栏按钮

如何知道哪个宏被分配给 Word 2003 中的某个工具栏按钮

我有一个很久以前别人制作的 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

相关内容