Ошибка времени выполнения «1004». Невозможно изменить макрос в скрытой книге. Отобразите книгу с помощью команды Показать при использовании onLoad в ленте XML

У меня такое ощущение, что я неправильно использую обратный вызов 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»: невозможно изменить макрос в скрытой книге. Отобразите книгу с помощью команды Показать.

Затем мне нужно дважды нажать кнопку «Конец» при появлении ошибки, потому что она всплывает дважды.

Думаю, я могу понять, почему это вызывает эту ошибку, моя настраиваемая надстройка еще не загрузила настроенную ленту, но, поскольку основная лента загружена, она пытается запустить макрос, который не видит. Однако, если у меня уже открыта книга с уже видимой настраиваемой лентой, код просто не запустится. Мы ценим любые предложения.


person Jon Rose    schedule 07.02.2018    source источник
comment
Где процедура spCode? В твоем аддине? Объявлен ли он публичным?   -  person Excel Developers    schedule 07.02.2018
comment
@Excel Developers - spCode находится в моей надстройке. Он находится в том же модуле, что и процедура spRibbon_onLoad. Как написано выше, это не публично, но я тоже пробовал и получил те же результаты.   -  person Jon Rose    schedule 07.02.2018


Ответы (1)


После небольшого дополнительного исследования я обнаружил, что простая временная задержка в одну секунду достигла этого. Это не совсем то, что я искал, но он работает, поэтому я решил ответить на свой вопрос.

Sub spRibbon_onLoad(ribbon As IRibbonUI)
    Application.OnTime Now + TimeValue("00:00:01"), "spCode"
End Sub
person Jon Rose    schedule 09.02.2018