Excel 2013 tapex xml: CustomUI работает нормально, но получившаяся кнопка отказывается запускать мой макрос

Использование инструмента customUI для добавления вкладки в книгу Excel 2013 xlsm. Я использую Windows 7. CustomUI дает мне зеленый свет («Custom UI XML правильно сформирован!») И генерирует код обратного вызова. Когда я открываю книгу, появляется новая вкладка, новая группа и новая кнопка. Я добавляю код обратного вызова в module1 в VBA. Но когда я нажимаю новую кнопку, я получаю сообщение

«Невозможно запустить макрос« AddNodeNew ». Макрос может быть недоступен в этой книге или все макросы могут быть отключены».

Что ж, макрос AddNodeNew доступен, а макросы НЕ отключены. Так, что происходит? Примечание. Книга xlsm уже содержит множество других макросов (ни один из них не называется AddNodeNew).

Я хотел включить сюда код, но ваша система не позволяет мне - постоянно говорит мне, что я неправильно отформатировал его как код. Но я ДЕЙСТВИТЕЛЬНО отступил все на 4 пробела, которые он запрашивал, и все еще без кубиков. Справки по этой теме недостаточно.


person user3357899    schedule 01.03.2014    source источник


Ответы (1)


По-видимому, пользовательские элементы пользовательского интерфейса RibbonX могут вызывать макросы, хранящиеся в части ThisWorkbook проекта VBA, но я не понял, как вызывать макросы из модулей, а затем я узнал, что даже не хочу, потому что, когда модуль переименовывается, я бы необходимо настроить ссылку в пользовательском интерфейсе.

Итак, что вы можете сделать, так это создать вызывающий объект в ThisWorkbook, который затем будет вызывать функцию. Мое решение заключалось в том, чтобы поместить имя вызываемой функции в атрибут id элемента xml, а затем иметь единственную функцию Caller в ThisWorkbook, которая вызывалась всеми настраиваемыми элементами управления. При вызове вызывающая сторона считывает атрибут идентификатора элемента управления и вызывает другую функцию с этим именем, независимо от ее физического местоположения.

Public Sub Caller(ctrl As IRibbonControl)
    Dim sFunction As String: sFunction = ctrl.ID
    Application.Run sFunction
End Sub
person Eleshar    schedule 08.02.2020