Настройка VBA — ленты — при добавлении дополнения

#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 может открыться некорректно (сделайте резервную копию).

  1. Вы создадите папку с именем «customUI» и внутри этой папки файл с именем «customUI.xml «
  2. Вы напишете все свои данные о ленте внутри » .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> 
     
  1. Переименуйте свой .Файл XLSM для .ZIP, после чего вы сможете редактировать / добавлять файлы. Добавьте папку customUI в zip-файл.
  2. Из 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" /> 
     
  3. Переименуйте файл обратно в .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» и т. Д. Если вы создаете много групп и кнопок, обязательно избегайте дублирования идентификаторов.