У меня такое ощущение, что я неправильно использую обратный вызов onLoad. По сути, я пытаюсь запустить некоторый код в VBA сразу после загрузки моей настраиваемой ленты (которая находится в созданной мной надстройке).
Это код XML:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="spRibbon_onLoad">
Вот код VBA:
Это глобальная декларация:
Dim grxIRibbonUI
Это код, который я пытаюсь запустить:
Sub spRibbon_onLoad(ribbon As IRibbonUI)
Set grxIRibbonUI = ribbon
Call spCode 'this is the code I'm attempting to run
End Sub
Проблема в том, что если я пытаюсь открыть существующую книгу (когда не открыты другие экземпляры Excel), я получаю следующую ошибку:
Ошибка времени выполнения «1004»: невозможно изменить макрос в скрытой книге. Отобразите книгу с помощью команды Показать.
Затем мне нужно дважды нажать кнопку «Конец» при появлении ошибки, потому что она всплывает дважды.
Думаю, я могу понять, почему это вызывает эту ошибку, моя настраиваемая надстройка еще не загрузила настроенную ленту, но, поскольку основная лента загружена, она пытается запустить макрос, который не видит. Однако, если у меня уже открыта книга с уже видимой настраиваемой лентой, код просто не запустится. Мы ценим любые предложения.
spCode
находится в моей надстройке. Он находится в том же модуле, что и процедураspRibbon_onLoad
. Как написано выше, это не публично, но я тоже пробовал и получил те же результаты. - person Jon Rose   schedule 07.02.2018