Кнопка настраиваемой вкладки не подключается к макросу - PullRequest
1 голос
/ 08 июля 2020

Я пытаюсь создать настраиваемую вкладку для запуска макросов, следуя указаниям здесь . Я выполнил указанные шаги, но при попытке нажать кнопку возникают проблемы. Я получаю сообщение: Cannot run macro 'hello'. The macro may not be available in this workbook or all macros may be disabled. модификация файла .rels выглядит так: <Relationship Id="metrics" Type="http://schemas.microsoft.com/office/2007/relationships/ui/extensibility" Target="/CustomUI/trial_CustomUI.xml"/> Имена папок и файлов совпадают Target. Файл XML выглядит так:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon> 
        <tabs> 
            <tab id="CustomTab" label="My Tab"> 
                <group id = "hello" label = "Hello">
                    <button id = "hi" label =  "Hello" imageMso = "ShapeSmileyFace" size = "large" onAction = "hello"/>
                </group>
            </tab> 
        </tabs> 
    </ribbon> 
</customUI> 

Макрос ленты выглядит так:

Option Explicit

Public MyRibbon As IRibbonUI

Public Sub ControlRibbon(Ribbon As IRibbonUI)
    Set MyRibbon = Ribbon
End Sub

Макрос выглядит так:

Option Explicit

Public Sub Hello(control As IRibbonControl)
    MsgBox "Hello"
End Sub

Все ответы I попались касаются модификации Trust access to the VBA project object model. Любая помощь будет принята с благодарностью.

EDIT: ответ @Peyter сыграл важную роль в том, чтобы я смог прийти к ответу. Однако мне нужно было внести некоторые незначительные изменения в синтаксис, чтобы заставить его работать:

  1. Вместо Macro() VBA по умолчанию Macro
  2. вместо OnAction="Workbookname.xlsm!Control_Macroname" Я использовал OnAction="Workbookname.xlsm!Control_Macroname.Control_Macroname"

С этими модификациями я смог заставить работать кнопку на ленте.

1 Ответ

1 голос
/ 09 июля 2020

Да, это сложная задача, вы почти у цели.

Вот что вам нужно сделать с вашими 3 частями

Предполагая, что ваш WB назван: workbookname.xlsm

Пример части 1 wb xml Ссылки Макрос управления (функция) Имя:

OnAction="Workbookname.xlsm!Control_Macroname"

Макрос управления лентой части 2 (функция):

Sub Control_Macroname(control as IRibbonControl)
   Call Macro()
End Sub

Макрос части 3 на самом деле запустить:

Sub Macro()
   'do stuff
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...