1

У меня есть панель инструментов Word 2003, сделанная кем-то давно. Панель инструментов содержит множество кнопок и назначенных макросов.

До сих пор мне удавалось устанавливать точки останова в коде VBA, чтобы выяснить, какие макросы запускаются, но для одной кнопки на панели инструментов у меня возникла проблема. Кажется, нет никакого соответствующего макроса. Когда я нажимаю на кнопку панели инструментов, Word также говорит: «Макрос не найден ...»). Моя стратегия поиска точек останова здесь не кажется выигрышной.

Я очень хорошо знаю об этом: Меню инструментов> Настройка> Щелкните правой кнопкой мыши на конкретной кнопке панели инструментов:

Меню Сервис> Настройка> Щелкните правой кнопкой мыши на определенной кнопке панели инструментов.

К сожалению, это не помогает мне. Могу ли я каким-то образом увидеть свойства события обратного вызова для определенной кнопки панели инструментов? Мне нужно знать, какой макрос предназначена для запуска определенной кнопки.

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .