Если перед вам стоит задача по автоматизации чего-нибудь в excel, то забудьте про макросы, расположенные непосредственно в книге, создавайте панель инструментов (ribbon), которая
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/c3d/80f/7f4/c3d80f7f4ca063cb755f5f1d9a4120e5.jpg)
Для того что бы создать такую панель вам потребуется
1) файл excel с расширением xlam, расположенный в %userprofile%\appdata\roaming\microsoft\addins
2) редактор xml ресурса (для разметки кнопок)
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/d21/7f7/2e9/d217f72e9eb73e3df22717ed654a353f.png)
3) определить кнопки по примеру
где p_MemberSelect это процедура VBA
4) в иницилазации процедуры (в файле xlam) нужно передавать предопределенные параметры
Sub p_MemberSelect(ByVal vIRibbonControl As IRibbonControl)
Но у данного решения есть одно ограничение — нет возможности создавать формы, встроенные в панели Excel, например:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/b65/df1/c88/b65df1c88f9fa266e22fb68afcf4ed72.png)
Этот пример из проекта In2Sql (плагин для Excel, который визуализирует объекты SQL). В этом плагине код создан с помощью c# и библиотек VSTO.
- не зависит от конкретного файла
- располагается в основной панели инструментов
- дает кастомизируемый UI
![image](https://habrastorage.org/getpro/habr/post_images/c3d/80f/7f4/c3d80f7f4ca063cb755f5f1d9a4120e5.jpg)
Для того что бы создать такую панель вам потребуется
1) файл excel с расширением xlam, расположенный в %userprofile%\appdata\roaming\microsoft\addins
2) редактор xml ресурса (для разметки кнопок)
![image](https://habrastorage.org/getpro/habr/post_images/d21/7f7/2e9/d217f72e9eb73e3df22717ed654a353f.png)
3) определить кнопки по примеру
button id="b_MemberSelect" label="Member Select" onAction="p_MemberSelect" imageMso="ReturnToTaskList" size="large"
где p_MemberSelect это процедура VBA
4) в иницилазации процедуры (в файле xlam) нужно передавать предопределенные параметры
Sub p_MemberSelect(ByVal vIRibbonControl As IRibbonControl)
Но у данного решения есть одно ограничение — нет возможности создавать формы, встроенные в панели Excel, например:
![image](https://habrastorage.org/getpro/habr/post_images/b65/df1/c88/b65df1c88f9fa266e22fb68afcf4ed72.png)
Этот пример из проекта In2Sql (плагин для Excel, который визуализирует объекты SQL). В этом плагине код создан с помощью c# и библиотек VSTO.