В этой статье:
- Что такое надстройка
- Как создать надстройку
- Создание собственного меню надстройки для версий Excel 2003
- Создание собственного меню надстройки для версий 2007 и выше
ЧТО ТАКОЕ НАДСТРОЙКА
Для начала разберемся - что такое надстройка и для чего она нужна.
Как правило надстройки используют для распространения программного кода, который будет доступен для любой книги Excel. Т.к. надстройка запускается вместе с приложением - очень удобно хранить в ней коды. Можно создать меню для запуска процедур(об этом ниже) и функции пользователя - созданные в надстройке они доступны в любой открытой книге Excel без ссылок на другую книгу, что несомненно очень удобно. Функции пользователя, прописанные в надстройке для Excel 2007 и выше так же доступны по вводимым начальным символам:
и после нажатия TAB имя функции будет вставлено в ячейку.
Кроме модулей с кодами надстройки могут содержать и таблицы данных и диаграммы и все, что можно хранить в обычной книге. Но учитывая то, что книга скрыта - особого смысла в этих данных нет, если только не предполагается использовать эти данные в качестве шаблонов для создания определенных отчетов из надстройки. Часто на листах надстроек хранят константы для работы кода, если по каким-либо причинам не хочется использовать константы внутри кода VBA. Данные в ячейках файла надстройки можно изменять во время работы, но я не рекомендую сохранять открытый и исполняемый в данный момент файл надстройки, во избежание конфликтов.
КАК СОЗДАТЬ НАДСТРОЙКУ
Создать надстройку просто: из любого файла Excel идете в меню:
- Excel 2010 и новее: Файл (File)-Сохранить как (Save As)-Из выпадающего списка "Тип файла" выбрать Надстройка Excel(.xlam) (Excel Add-In(.xlam)) или Надстройка Excel 97-2003(.xla) (Excel 97-2003 Add-In(.xla)).
- Excel 2007: Кнопка Офис-Сохранить как (Save As)-Из выпадающего списка "Тип файла" выбрать Надстройка Excel(.xlam) (Excel Add-In(.xlam)) или Надстройка Excel 97-2003(.xla) (Excel 97-2003 Add-In(.xla)).
- Excel 2003: Меню-Сохранить как-Из выпадающего списка "Тип файла" выбрать "Надстройка Excel(.xla)".
Однако рекомендую не спешить с сохранением файла как надстройки. Сначала следует весь функционал, закладываемый в надстройку, потестировать, отладить и удостовериться, что все работает как предполагалось. Т.к. после сохранения файла как надстройки и открытия надстройки в Excel - закрыть её можно будет только закрыв Excel полностью(конечно, можно еще воспользоваться кодом вроде Workbooks("MyAddin.xla").Close
, но это не очень удобно в разработке).
Так же следует заранее выбрать формат надстройки - для версий Excel 97-2003(.xla) и или только от 2007(.xlam) и выше. Надстройки .xla работают во всех версиях Excel, в том числе и в 2007 и выше. Это, пожалуй, единственное их преимущество перед форматом .xlam. Т.к. при этом все меню, которые будут созданы для вызова кодов, в версиях от 2007 и выше будут располагаться на вкладке "Надстройки" и будут иметь минимум настроек: нет возможности изменить размер значка; разбить на группы; сделать красивые подсказки; расположить в два ряда и т.п.
Для формата .xlam доступен более широкий ассортимент: они могут так же создать меню на вкладке "Надстройки", а могут и создавать собственные вкладки(через XML-схемы), команды на которых можно расположить в соответствии со всеми красивостями и достоинствами оформления, которое можно наблюдать в Ribbon-панелях Excel 2007 и выше.
Дальше я как раз более подробно расскажу про оба метода создания меню.
Я покажу создание надстроек на примере простого кода, который будет записывать в активную ячейку текущего листа число 10, закрасит ячейку красным цветом и установит для ячейки границы.
Код этой процедуры:
'--------------------------------------------------------------------------------------- ' Procedure : Test ' DateTime : 11.08.2014 12:08 ' Author : The_Prist(Щербаков Дмитрий) ' http://www.excel-vba.ru ' Purpose : Записываем в активную ячейку число 10 ' красим в красный цвет заливку ' устанавливаем границы '--------------------------------------------------------------------------------------- Sub Test() With ActiveCell .Value = 10 .Interior.Color = vbRed .Borders.Color = vbBlack End With End Sub |
СОЗДАНИЕ СОБСТВЕННОГО МЕНЮ НАДСТРОЙКИ ДЛЯ ВЕРСИЙ EXCEL 2003
Примерный вид меню в Excel 2007 и выше:
Собственно, меню, совместимое со всеми версиями Excel делается исключительно на уровне VBA следующим кодом:
'--------------------------------------------------------------------------------------- ' Module : ЭтаКнига ' DateTime : 11.08.2014 12:13 ' Author : The_Prist(Щербаков Дмитрий) ' http://www.excel-vba.ru ' Purpose : '--------------------------------------------------------------------------------------- Option Explicit 'константа уровня модуля - имя меню 'Обязательно задать, чтобы можно было идентифицировать Const sMenuBarName As String = "Test Addin www.Excel-VBA.ru" '--------------------------------------------------------------------------------------- ' Procedure : Workbook_BeforeClose ' Purpose : Процедура выполняется перед закрытием книги ' удаляем созданное меню после закрытия надстройки '--------------------------------------------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next ' обработчик ошибки нужен, если меню такого нет 'удаляем меню, для исключения дублирования меню при повторном запуске Application.CommandBars(sMenuBarName).Delete End Sub '--------------------------------------------------------------------------------------- ' Procedure : Workbook_Open ' DateTime : 11.08.2014 12:39 ' Author : The_Prist(Щербаков Дмитрий) ' http://www.excel-vba.ru ' Purpose : Процедура создания меню ' как отдельная панель для 2003 ' на вкладке "Надстройки" для 2007 и выше '--------------------------------------------------------------------------------------- Private Sub Workbook_Open() On Error Resume Next ' обработчик ошибки нужен, если меню такого нет 'удаляем меню, для исключения дублирования меню при повторном запуске Application.CommandBars(sMenuBarName).Delete On Error GoTo 0 'добавляем меню With Application.CommandBars.Add(sMenuBarName, temporary:=True) 'добавляем новую кнопку With .Controls.Add(Type:=1) 'добавляем обычную кнопку на панель 'отображаемый текст кнопки .Caption = "ИЗМЕНИТЬ СВОЙСТВА АКТИВНОЙ ЯЧЕЙКИ" 'стиль кнопки 'доступные стили: '1 - только значок(16x16) '2 - только текст '3 - картинка и текст .Style = 3 'назначаем картинку из набора офиса 'посмотреть доступные можно: http://www.excel-vba.ru/general/moi-nadstrojki/panel-ikonok-faceid/ .FaceId = 2 'имя процедуры, которая будет выполнена при нажатии кнопки .OnAction = "Test" End With 'делаем меню видимым .Visible = True End With End Sub |
Основные моменты я постарался расписать в комментариях, но на некоторых все же хочу заострить внимание.
Свойство Type
.Controls.Add(Type:=1)
Наверное, самое важное свойство. Оно отвечает за тип элемента меню. Доступно всего пять типов:- 1 - Button(обычная кнопка)
- 2 - TextBox(текстовое поле с возможностью записи в него значений и считывания значений из него)
- 3 - List(выпадающий список с заранее заданным списком значений)
- 4 - ComboBox(выпадающий список с возможностью записи в поле произвольного значения)
- 10 - PopupMenu(выпадающее меню с возможностью добавления новых элементов)
Свойство Style
.Style = 3
данное свойство управляет видом кнопки. Доступные стили:- 1 - только значок(16x16). Необходимо указывать свойство FaceID
- 2 - только текст. Свойство FaceId может быть указано, но никак не влияет на внешний вид кнопки
- 3 - картинка и текст. Обязательно указывать хотя бы одно из свойств: Caption или FaceID
Если хотите отобразить просто значок или значок вместе с текстом - то столкнетесь с проблемой выбора значка. Поэтому я давно создал надстройку, которая позволяет просмотреть все ID всех доступных значков офиса: Панель иконок FaceID.
Так же можно и свои значки создавать, однако я не буду здесь затрагивать эту тему, т.к. получится запутанно и обширно. Если кратко: необходимо создать свой значок размером 16x16, с расширением .gif. Затем создать копию иконки и предполагаемые непрозрачные области закрасить черным, а прозрачные - белым. Эту копию необходимо задать для свойства .Mask Свойство OnAction:
.OnAction = "Test"
Данная строка отвечает за назначение процедуры, которая будет выполнена после нажатия на кнопку(в случае с ComboBox и TextBox - изменение значения. Вызван код будет после выхода из режима редактирования элемента). Test - это имя процедуры. Её я привел выше и именно она будет выполнена при нажатии на эту кнопку.
Иногда возникает вопрос: как сделать на такой панели ToggleButton? Т.е. кнопку, которая при нажатии остается в нажатом состоянии, а при повторном нажатии - в отжатом(т.е. в обычном). В данном случае это возможно исключительно через "финты" вызываемой по нажатию кнопки процедуры:
Sub Add_CmBar() With Application.CommandBars.Add("Test ToggleButton", temporary:=True) With .Controls.Add(Type:=1) .Caption = "ToggleButton" .Style = 2 .OnAction = "Emulate_Toggle" End With .Visible = True End With End Sub 'процедура, которая выполняется при нажатии кнопки "ToggleButton". Меняет видимое состояние кнопки. Sub Emulate_Toggle() Dim bt As CommandBarButton Set bt = Application.CommandBars.ActionControl 'проверяем текущее состояние кнопки. 'если нажата - отжимаем, если отжата - нажимаем If bt.State = msoButtonDown Then bt.State = msoButtonUp Else bt.State = msoButtonDown End If End Sub |
Еще одна проблема при разработке таких панелей: невозможность явно указать кнопку в стиле Caption(т.е. неактивную к нажатию кнопку). Это тоже можно сделать при помощи обычной Button, только в свойствах кнопки надо свойство Enabled установить в False:
при этом обязательно необходимо указать Style 2 и назначить Caption.
Так же у объекта CommandBar есть такие свойства как .Left(положение относительно левого края окна Excel) и .Top(положение относительно верхнего края окна Excel), которые задают положение строки меню на панели. Но они мало актуальны для версий 2007 и выше, т.к. там для таких панелей отведена отдельная вкладка и все они помещаются на ней в том порядке, в котором были на неё добавлены. По умолчанию, если данные свойства не заданы - в 2003 Excel панель создается плавающая и пользователь может переместить её в любое удобное для него место. Если же они указаны, то панель будет расположена в заданных координатах относительно окна Excel.
Во вложении ниже пример надстройки с открытым кодом. Но в примере код расширен - там я привел коды с использованием всех типов элементов: и кнопки, и эмуляция ToggleButton, и списки, и текстбокс и выпадающее меню с доп.кнопками. В кодах есть комментарии, поэтому при желании разобраться не составит труда.
Так же можно при запуске надстройки добавлять в контекстное меню(меню, появляющееся по правому клику мыши на ячейке) свои команды. По сути мало что меняется, кроме пары вещей:
- надо указывать конкретное имя меню, в которое добавляем некую кнопку. Для контекстного меню ячеек это "Cell":
Application.CommandBars("Cell") - лучше указывать положение элемента относительно уже существующих в меню. Делает это при помощи указания параметров before или after:
Application.CommandBars("Cell").Controls.Add(Type:=1, before:=4)
При этом добавить можно как собственные кнопки, так и уже существующие. Для примера добавим одной кнопкой дубль нашей команды с лены "ИЗМЕНИТЬ СВОЙСТВА АТИВНОЙ ЯЧЕЙКИ", а второй - вставку в ячейку только значений(встроенная команда - подробнее в статье: Как удалить в ячейке формулу, оставив значения?):
'========================================================= ' ' ДОБАВЛЯЕМ СВОЙ ПУНКТ В МЕНЮ ПРАВОЙ КНОПКИ МЫШИ ' With Application.CommandBars("Cell") 'дублируем кнопку "ИЗМЕНИТЬ СВОЙСТВА АТИВНОЙ ЯЧЕЙКИ" с панели 'добавляем перед 4-м элементом With .Controls.Add(Type:=1, before:=4) .Caption = "ИЗМЕНИТЬ СВОЙСТВА АТИВНОЙ ЯЧЕЙКИ" .Style = 3 .FaceId = 2 .OnAction = "Test" End With 'добавляем кнопку встроенной в Excel команды "Вставить значения" 'ищем команду "Вставить значения" по её ID в контекстном меню Set cbb = .FindControl(ID:=370) 'удаляем команду из меню, если она была уже добавлена ранее If Not cbb Is Nothing Then cbb.Delete End If 'добавляем перед 5-м элементом(после наше собственной команды) .Controls.Add ID:=370, before:=5 End With |
Надстройка для Excel 97-2003 и выше.zip (22,6 КиБ, 3 246 скачиваний)
СОЗДАНИЕ СОБСТВЕННОГО МЕНЮ НАДСТРОЙКИ ДЛЯ ВЕРСИЙ EXCEL 2007
Как я уже писал - для Excel 2007 и выше подходит описанный выше метод создания собственного меню для ранних версий. Однако меню в данном случае помещается исключительно на вкладку "Надстройки" и имеет довольно убогий вид (как можно лицезреть выше) в сравнении с общим Ribbon-интерфейсом других панелей. Чтобы посмотреть как это выглядит можете просто скачать файл выше и запустить его. Появится вкладка "Надстройки" с одной кнопкой.
Однако учитывая появившуюся в 2007 версии офиса возможность кастомизировать ленту Ribbon через язык XML, гораздо практичнее(особенно для разработчиков) создавать собственную панель с отдельным именем, на которой можно разместить красиво команды, добавить свои собственные значки для команд без особых усилий.
Чтобы добавить свою панель необходимо изменить XML-схему для надстройки, которая присутствует в любом файле формата 2007. Есть несколько методов(я опишу лишь два).
- Изменить расширение файла с .xlam на .rar или .zip и открыть любым архиватором.
Если не отображается расширение:
Панель управления-Свойства папки(для Win 7 - Параметры папок)- вкладка Вид- Снять галочку с "Скрывать расширение для зарегистрированных типов файлов" - Добавить в архив папку "customUI", папку "_rels" и папку "images"
- Создать файл "customUI.xml", который лично я бы назвал основным - в нем необходимо впоследствии прописать все панели и команды по законам языка XML. После чего данный файл необходимо поместить в папку "customUI"
- В папке "images" будут храниться все значки, которые будут расположены на панели
- Папка "_rels" должна внутри содержать файл "customUI.xml.rels", в котором перечисляются связи картинок с командами и панелями. Проще говоря - схема взаимосвязей ресурсов
Но все это очень муторно и необходимо знать язык XML. Уверен, большая часть читающих статью уже 100500 раз нахмурили брови и пару раз перечитали, надеясь понять о чем речь. Поэтому не будем дальше разбирать этот метод и перейдем к следующему.
Для начала работы и создания своего меню необходимо открыть программу RibbonXMLEditor и выбрать в ней файл, в который хотите внедрить меню. Это должен быть файл формата .xlsm,.xlam или .xlsb. Т.к. мы создаем надстройку - наш формат .xlam.
На рисунке отмечены цифрами шаги, расписанные ниже:
1. Добавляете ribbon (нажатием кнопки на элементе)
2. Далее tabs и tab(так же автоматом добавится элемент groupe) - выделяете строку
и внутрь кавычек для id вписываете groupe_1, а для label вписываете имя вкладки - Свойства ячейки.
3. Уже после этого внутрь groupe добавляете button и задаете ей id - change_cell. Должен получится такой код:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="excel-vba" label="Test excel-vba.ru"> <group id="groupe_1" label="Свойства ячейки"> <button id="change_cell" /> </group> </tab> </tabs> </ribbon> </customUI> |
Id каждого элемента должно быть уникальным и предпочтительнее указывать его исключительно на латинице(англ.алфавит), т.к. кириллица распознается с трудом и есть шанс получить ошибку.
Теперь продолжаем добавлять свойства для
4. для начала подгружаем картинку через соответствующую кнопку.
5. После этого она будет в выпадающем списке правее.
6. Ставим курсор после
7. При помощи выпадающего меню параметров выбираем
8. При помощи выпадающего списка функций обратного вызова выбираем onAction и так же вставляем. Вписываем туда имя вызываемой процедуры - CallTest.
В результате должно получиться:
<?xml version="1.0" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="excel-vba" label="Test excel-vba.ru"> <group id="groupe_1" label="Свойства ячейки"> <button id="change_cell" image="table_edit" label="Изменить свойства ячейки" onAction="CallTest" /> </group> </tab> </tabs> </ribbon> </customUI> |
Для отладки схемы через RibbonXMLEditor можно использовать кнопку отладки(зеленый треугольник) или сочетание клавиш F9. Для проверки корректности схемы - зеленая галочка. Жмем на неё и если в схеме будут ошибки - они сразу будут найдены и показаны в сообщении, с указанием номера строки и столбца, в которых ошибка.
На этом, казалось бы, все. Но нет. Просто так, сама по себе XML-схема не вызовет процедуру - необходимо создать функции обратного вызова. Вот здесь у RibbonXMLEditor есть еще одна отличная функция - генерация модуля обратных вызовов - 9. Нажимаем на кнопку - получаем готовые функции. Как правило верхние две строки не нужны - нам нужны лишь сами функции:
Sub CallTest(control As IRibbonControl) End Sub |
Копируем. Сохраняем схему нажатием дискеты в RibbonXMLEditor и закрываем программу.
Теперь открываем наш файл и вставляем скопированный текст функции. В эту функцию прописываем вызов нашей, уже созданной ранее процедуры: Test
Sub CallTest(control As IRibbonControl) Call Test End Sub |
В принципе, можно и прямо в эту процедуру прописать все действия из процедуры Test.
Сохраняем.
Открываем наш файл - видим, что новая вкладка "Test excel-vba.ru" появилась, кнопка на ней есть. По нажатии на кнопку выделенная ячейка окрашивается в красный цвет, в ней прописывается значение 10 и создаются границы.
 
Так же можно вставлять на свою вкладку встроенные команды. Для этого в button используется не id, а idMso. Эти команды не нуждаются в обработке обратных вызовов, т.к. при их использовании происходит вызов встроенных функций - кнопки как бы просто дублируются на нашу вкладку со всеми их возможностями. Например, чтобы добавить на свою вкладку стандартную кнопку перехода в VisualBasic надо добавить кнопку с idMso VisualBasic:
<button idMso="VisualBasic" /> |
Сам код при этом будет выглядеть так:
<?xml version="1.0" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="excel-vba" label="Test excel-vba.ru"> <group id="groupe_1" label="Свойства ячейки"> <button id="change_cell" image="table_edit" label="Изменить свойства ячейки" onAction="CallTest" /> <button idMso="VisualBasic" /> </group> </tab> </tabs> </ribbon> </customUI> |
Естественно, на создании одних кнопок функционал лент Ribbon не ограничивается. Доступны почти все элементы(вып.меню, галереи, большие иконки(32х32) и т.д.), которые есть в стандартных вкладках. Если чуть потренироваться и поэкспериментировать с приложением RibbonXMLEditor - то вскоре вы сможете быстро и легко создавать красивые и функциональные приложения. Как пример таких приложений можете посмотреть описание к моей надстройке MulTEx.
Так же как и в случае с надстройками для 2003 Excel, здесь можно создавать кнопки в контекстном меню(правая кнопка мыши), но и тут не обошлось без нюансов:
- изменение данного меню доступно только начиная с версии Excel 2010. Для 2007 версии придется использовать старые методы - те же, что и для 2003(т.е. внедрение отдельного кода на Workbook_Open надстройки, как в примере выше для надстройки 2003)
- в надстройке Ribbon XML Editor я не нашел встроенного инструмента для вставки кодов обработки меню правой кнопкой мыши. Похожий по "звучанию" contextualTabs не совсем то, что нужно(а если быть точнее - совсем не то). contextualTabs - это динамические вкладки, которые появляются после основных вкладок при работе с определенными объектами. Например, с умными таблицами. Когда выделяем умную таблицу или любую ячейку в ней, то появляется группа динамических вкладок "Работа с таблицами". Вот в неё и вносятся изменения при помощи contextualTabs
Поэтому прописывать "добавки" в меню по правой кнопке мыши придется самостоятельно. Код вставки уже имеющегося у нас кода приведен ниже:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="excel-vba" label="Test excel-vba.ru"> <group id="groupe_1" label="Свойства ячейки"> <button id="change_cell" image="table_edit" label="Изменить свойства ячейки" onAction="CallTest" /> <button idMso="VisualBasic" /> </group> </tab> </tabs> </ribbon> <contextMenus> <contextMenu idMso="ContextMenuCell"> <button id="change_cell_context" image="table_edit" label="Изменить свойства ячейки" onAction="CallTest" insertBeforeMso="Cut" /> </contextMenu> </contextMenus> </customUI> |
добавлять его надо исключительно на вкладке 2010, 2013(customUI14.xml) внизу редактора Ribbon XML Editor. Обращаю внимание, что код создания собственной вкладки на панели дублируется: он должен присутствовать и в
Остальные правила для создания элементов меню точно такие же, как и для вкладок: можно добавлять как собственные команды, так и встроенные(при помощи idMso).
Я сам предпочитаю контекстное меню дополнять исключительно кодом VBA, т.к. для 2007 его в любом случае придется писать.
Надстройка для Excel 2007 и выше.zip (14,6 КиБ, 3 575 скачиваний)
В примере я не стал делать много кнопок и их обработку - слишком уж много различных элементов там доступны и для раскрытия всего функционала этой статьи не хватит. Да и в интернете уже полно статей с разбором работы с XML-интерфейсом новых версий Excel. Основной упор сделан на создание основной вкладки и контекстного меню, т.к. техника создания контекстного меню уж очень не очевидна из надстройка Ribbon XML Editor.
Осталось дело за малым - научиться эти надстройки подключать. Но об этом я уже писал в статье Подключение/отключение надстроек
Дмитрий, при нажатии на кнопку 4 программа предлагает выбрать картинку из папки пользователя. Так и должно быть? Я думал, что при нажатии откроется список с перечнем иконок.
Урри, если честно не совсем понял какую надстройку Вы скачивали. В обоих выложенных надстройках только одна кнопка и никаких папок она вообще не открывает.
Добрый день, Дмитрий.
Разбираюсь в данный момент с созданием надстройки по вашему примеру!
Появилась такая проблема:
После создания и установки надстройки, начинаю тестировать, и выскакивает ошибка: "wrong number of arguments or invalid property assignment". В чем может быть проблема?
Антон, ошибка где-то в Ваших кодах - где-то неверно вызываете процедуру. Точнее можно сказать только увидев, что Вы там и как делаете, какие коды и как используете. Обратитесь в форум - там можно файлы прикладывать.
Код я использую ваш, из этой статьи, процедура Test. Все делаю идентично, код даже пробовал полностью копировать... Все равно эта ошибка выскакивает.
Антон, скачайте файлы, приложенные к статье и посмотрите как все там организовано и где расположено. Я проверял лично - все отрабатывает без каких-либо ошибок.
Спасибо за статью. Очень оказалась полезной. Да и вообще весь сайт полезный и крутой. Заодно узнал о Ribbon editor`е, а то пользовался Custom UI Editor`ом :)
Прекрасная статья, все очень доходчиво. Даже я справился. Спасибо!
Хотя, как оказалось, не со всем я справился. Я все-таки нахмурил брови и пошел по первому методу (XML) и столкнулся со следующей проблемой - не удается поменять значок надстройки. Скачал в интернете, закинул в images, формат такой же, как и в примере (.png, 16x16, весит даже меньше, чем в примере), прописал её название в customUI.xml и она не отображается на панели. Что я упустил? Возможно нужно еще где-то описать картинку?
Аааа, все, я разобрался. Кому интересно, вот в этом файле:
customUI\_rels\customUI.xml.rels
нужно каждую картинку описывать, пример:
Не зря говорят, правильно заданный вопрос - половина ответа, сам с собой пообщался))
Пример теговый, не распознался:
Relationship Id="sql" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="images/sql.png"/
Я все же советовал бы скачать RibbonXMLEditor, сделать им нужные действия и после этого изучить схемы в файле. Тогда вопросов будет куда меньше :)
Да я бы с радостью, но на работе, чтобы установить любое (даже бесплатное) приложение приходится получать столько согласований, указывать столько причин для установки, что проще нахмурить брови и мучить себя) хотя дома с удовольствием помучаю editor, спасибо за совет)
Здравствуйте! Хорошая статья, спасибо большое. А как делаются надстройки как Ваша? Как создавать такой же установщик и сделать чтоб Excel видел пользовательские функции из надстройки VSTO?
Иван, моя надстройка это DLL(т.е. надстройка COM). Пишется она не из VBA, а практически на любом языке программирования, из которого возможно создание DLL. Проще всего это делается из Visual Studio - там есть шаблоны проектов для надстроек.
Установщики отдельная не быстрая тема. Да и вообще Вы задали вопросы, ответы на которые нельзя просто взять и раскрыть в одном комментарии. Просто поищите по сети: создание надстроек COM. Пару статей с общим смыслом точно найдете.
Здравствуйте.
Вы пишете о создании "красивых подсказок". Именно эта тема меня сейчас интересует. Подскажите пожалуйста, есть ли возможность менять текст всплывающей подсказки к созданной пользователем кнопке в ленте Excel (во вкладке Add-in) с помощью только лишь VBA (чтобы файл вообще не содержал XML) ?
Смотрите в сторону свойства tooltip создаваемого контрола.
Как открыть ваш файл в RibbonXMLEditor? Ни из зипа, ни сам файл не открываются. Не могу понять, как загружать списки в комбобокс. Сам файл примера, и VBE открываются. Сделала по аналогии с вашим файлом. Ругается, пишет, что не находит объекта. Новиков тоже не знает, спрашивала.
Людмила, не очень понял. То Вы пишите, что сам файл не открывается, то "сам файл примера и VBE" открываются. Что не открывается-то? Про какой вообще файл речь? Ribbon XML Editor работает только с файлами 2007 Excel и выше. файлы .xla им не отрываются, если речь про файл надстройки для всех версий, включая 2003. Там весь код создания кнопок в VBA.