#vba #excel-addins
#vba #excel-дополнения
Вопрос:
Я создал программу, которую хотел распространить среди своих коллег, они не ориентированы на VBA. Поэтому я хочу легко его распространять.
Я создал надстройку, при установке надстройки необходимо создать пользовательскую ленту. Я старался изо всех сил, но не могу найти легкую для понимания документацию.
Мой код выглядит следующим образом :
Private Sub Workbook_AddinInstall()
On Error Resume Next 'Just in case
Application.CommandBars("Worksheet Menu Bar").Controls("Super Code").Delete
Set cControl = Application.CommandBars("Worksheet Menu Bar").Controls.Add
With cControl
.Caption = "Open SCF workbook"
.Style = msoButtonIconAndCaptionBelow
.OnAction = "OpenTheCorrectFile"
.FaceId = 7720
.DescriptionText = "Open the SCF workbook"
End With
Set cControl = Application.CommandBars("Worksheet Menu Bar").Controls.Add
With cControl
.Caption = "Are they onboard"
.Style = msoButtonIconAndCaptionBelow
.FaceId = 5817
.OnAction = "Check_Suppliers_Already_On_Board"
.DescriptionText = "Check if suppliers have already been on boarded"
End With
End Sub
Теперь, если вы используете мой код, вы заметите, что:
- Кнопки маленькие
- Значки маленькие
- Нет описания при их очистке
- Нет специального имени для новой ленты, это надстройки вызова
- Для этой группы нет специального имени, это вызов «Команды меню»
Кто-нибудь знает, как это решить. Всякий раз, когда я ищу эти ответы, люди используют специальное приложение для создания лент, я не хочу этого делать. Я также новичок в VBA, поэтому приветствуется все, что легко усваивается.
Большое вам спасибо.
Комментарии:
1. Существует свойство ToolTipText, которое вы можете использовать для задания описания зависания (список доступных свойств: docs.microsoft.com/en-us/office/vba/api/overview /… )
2. Также есть свойства ширины и высоты, но я не смог заставить их работать (размер кнопки не изменился). По-видимому, для улучшения настроек теперь требуется XML, пользовательский редактор пользовательского интерфейса для Microsoft Office или что-то в этом роде. Я думаю, что это будет невозможно, используя только VBA.
3. Здесь есть хороший пример того, как это сделать без каких-либо приложений, но вам придется вручную редактировать customUI.xml файл и структура файла xlsm (переименование в .zip, редактирование / добавление некоторых файлов и повторное переименование в .xlsm): docs.microsoft.com/en-us/office/vba/library-reference/concepts /…
4. Большое вам спасибо, Иван. Я попробую то, что вы мне посоветуете здесь. И спасибо за свойство всплывающей подсказки.
Ответ №1:
Вот пример того, как вы можете сделать это без использования какого-либо внешнего приложения, просто текстового редактора. Но вам придется быть осторожным, чтобы правильно написать XML-код, иначе файл Excel может открыться некорректно (сделайте резервную копию).
- Вы создадите папку с именем «customUI» и внутри этой папки файл с именем «customUI.xml «
- Вы напишете все свои данные о ленте внутри » .customUI.xml «. Я написал этот пример, охватывающий перечисленные вами проблемы: большие кнопки и значки (список изображений в https://bert-toolkit.com/imagemso-list.html ) / Описание всплывающей подсказки (screentip и supertip) / Название ленты (ярлык вкладки) / Названия групп (ярлыки групп)
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="CustomTab" label="Add-ins"> <group id="Group1" label="Menu Commands"> <button id="Button1" label="Happy" size="large" screentip="Test1" supertip="Test1 description" imageMso="HappyFace" onAction="Macro1" /> <button id="Button2" label="Save" size="large" imageMso="FileSave" onAction="Macro2" /> <button id="Button3" label="{a}" size="large" imageMso="FieldCodes" onAction="Macro3" /> </group > <group id="Group2" label="Other Commands"> <button id="Button4" label="Reply" size="large" imageMso="Reply" onAction="Macro4" /> </group > </tab> </tabs> </ribbon> </customUI>
- Переименуйте свой .Файл XLSM для .ZIP, после чего вы сможете редактировать / добавлять файлы. Добавьте папку customUI в zip-файл.
- Из ZIP-файла извлеките файл .rels, который находится внутри папки _rels, вы добавите эту строку между тегом last Relationship и тегом Relations closing, а затем поместите его обратно в ZIP-файл, перезаписав там файл .rels
<Relationship Id="someID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml" />
- Переименуйте файл обратно в .XLSM и откройте его, если все правильно, новая лента будет там. Важно, чтобы макросы, которые будут вызываться кнопками, имели управляющий параметр, например:
Sub Macro3(ByVal control As IRibbonControl)
Вот и все, все, что касается пользовательского интерфейса, находится в customUI.xml файл, в VBA больше нет кнопок добавления. Если вам нужно что-то изменить в пользовательском интерфейсе, вам придется снова переименовать его в ZIP, перезаписать customUI.xml файл и снова переименуйте в XLSM. Вот лента, которую я получил в этом примере:
Комментарии:
1. Ссылка на свойства кнопок ленты: docs.microsoft.com/en-us/openspecs/office_standards/ms-customui /…
2. Я не знаю, как кодировать в XML, думаю, мне придется это изучить! Большое вам спасибо за ваш подробный ответ, это очень полезно
3. Добро пожаловать! Еще одна деталь: я заметил, когда тестировал пример XML, что повторяющиеся идентификаторы могут вызывать ошибки, поэтому я назвал кнопки «Button1», «Button2» и т. Д. Если вы создаете много групп и кнопок, обязательно избегайте дублирования идентификаторов.