Это сложный вопрос.
Мы разработали Excel VBA AddIn. Это файл * .xlam. Этот надстройка довольно сложна и превращает Excel в собственное программное обеспечение (ну, в общем-то, оно все еще очень похоже на Excel).
Теперь мы хотим повысить нашу безопасность, разрешая только подписанные макросы внутри нашей компании. Поэтому мы создали сертификат, подписали код макроса VBA AddIn и установили сертификат. На самом деле два сертификата, один в качестве доверенного root сертификата и один в списке доверенных издателей.
И теперь мы хотим изменить параметры в центре доверия Excel, чтобы разрешать запуск только подписанным макросам , И это очень хорошо работает со всеми нашими макросами Excel - кроме как с AddIn.
Здесь начинается сложная часть. Сама надстройка запускается и работает. AddIn проверяет, открыт ли специальный тип файла Excel (с определенным пользовательским свойством), и запускает процесс инициализации. Сам файл Excel не содержит никаких макросов (это * .xlsx), но он содержит множество кнопок (объектов формы), которые "подключаются" процедурой инициализации к другим процедурам (подпрограммам / макросам) из AddIn.
MyWorksheet.Shapes("ShapeName").OnAction = "AddInModuleName.ProcedureName"
Этот код присоединяет сабвуферы VBA из надстройки к фигурам (кнопкам) на листе (без макросов). Таким образом, рабочий лист становится проводным и функциональным.
Это работает очень хорошо, когда на макросы не накладываются никакие ограничения. Но в этом случае, когда разрешено запускать только подписанные макросы, код не оправдывается. Кнопки мертвы.
Сам код просто отлично. Я могу вызвать его, например, с помощью сочетания клавиш. Но кнопка отказывается запускать код. Я объясняю это следующим образом: изменяя свойство формы «.OnAction», оно само рассматривается как код - по крайней мере, с точки зрения безопасности. Таким образом, вы можете утверждать, что я динамически добавляю «макросы» (свойство OnAction) в файл Excel. И этот код не считается подписанным. Он не наследует уровень безопасности от созданного им кода.
Какой бы ни была причина, по которой я. Мои кнопки не работают, несмотря на то, что код подписан и доверен. Любые идеи для обходных путей (несмотря на то, что я мог бы использовать ленту Excel вместо собственного интерфейса)?