Как добавить пользовательскую вкладку ленты с помощью VBA?


Я ищу способ добавить пользовательскую вкладку на ленте Excel, которая будет содержать несколько кнопок. Я случайно наткнулся на некоторые ресурсы, обращающиеся к нему через Google, но все они выглядят изворотливыми и возмутительно сложными.

что это быстрый и простой способ сделать это ? Я бы хотел, чтобы новая вкладка загружалась, когда мой VBA загружается в Excel..

обновление : Я попробовал этот пример из здесь но получить" объект требуется " ошибка на последней инструкции :

Public Sub AddHighlightRibbon()
Dim ribbonXml As String

ribbonXml = "<mso:customUI xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">"
ribbonXml = ribbonXml + "  <mso:ribbon>"
ribbonXml = ribbonXml + "    <mso:qat/>"
ribbonXml = ribbonXml + "    <mso:tabs>"
ribbonXml = ribbonXml + "      <mso:tab id=""highlightTab"" label=""Highlight"" insertBeforeQ=""mso:TabFormat"">"
ribbonXml = ribbonXml + "        <mso:group id=""testGroup"" label=""Test"" autoScale=""true"">"
ribbonXml = ribbonXml + "          <mso:button id=""highlightManualTasks"" label=""Toggle Manual Task Color"" "
ribbonXml = ribbonXml + "imageMso=""DiagramTargetInsertClassic"" onAction=""ToggleManualTasksColor""/>"
ribbonXml = ribbonXml + "        </mso:group>"
ribbonXml = ribbonXml + "      </mso:tab>"
ribbonXml = ribbonXml + "    </mso:tabs>"
ribbonXml = ribbonXml + "  </mso:ribbon>"
ribbonXml = ribbonXml + "</mso:customUI>"

ActiveProject.SetCustomUI (ribbonXml)
End Sub
5 80

5 ответов:

AFAIK вы не можете использовать VBA Excel для создания пользовательской вкладки на ленте Excel. Однако вы можете скрыть/сделать видимым компонент ленты с помощью VBA. Кроме того, ссылка, которую вы упомянули выше, предназначена для MS Project, а не для MS Excel.

Я создаю вкладки для моих приложений Excel / надстроек с помощью этой бесплатной утилиты под названием пользовательский редактор пользовательского интерфейса.


Edit: для размещения нового запроса OP

учебник

здесь короткий учебник, как и было обещано:

  1. после установки пользовательского редактора пользовательского интерфейса (CUIE), откройте его, а затем нажмите на Файл | Открыть и выберите соответствующий файл Excel. Пожалуйста, убедитесь, что файл Excel закрыт, прежде чем открыть его через CUIE. Я использую совершенно новый рабочий лист в качестве примера.

    enter image description here

  2. щелкните правой кнопкой мыши, как показано на рисунке ниже, и нажмите "Office 2007 Custom UI Part". Он будет вставлять - customUI.XML-код"

    enter image description here

  3. далее нажмите на меню Вставка / пример XML / пользовательская вкладка. Вы заметите, что основной код генерируется автоматически. Теперь вы все настроены на его редактирование в соответствии с вашими требованиями.

    enter image description here

  4. давайте проверим код

    enter image description here

    label="Custom Tab": заменить "пользовательская вкладка" с именем, которое вы хотите дать вашей вкладке. На данный момент давайте назовем это "Джером."

    ниже Часть добавляет пользовательскую кнопку.

    <button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="Callback" />
    

    imageMso: Это изображение, которое будет отображаться на кнопке. "HappyFace" - это то, что вы увидите в данный момент. вы можете скачать больше ID изображения здесь.

    onAction="Callback": "обратный вызов" - это имя процедуры, которая выполняется при нажатии на кнопку.

демо

С этим, давайте создадим 2 кнопки и назовем их "JG Button 1" и " JG Кнопка 2". Давайте сохраним счастливое лицо как образ первого и сохраним "Солнце" для второго. Измененный код теперь выглядит так:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="MyCustomTab" label="Jerome" insertAfterMso="TabView">
<group id="customGroup1" label="First Tab">
<button id="customButton1" label="JG Button 1" imageMso="HappyFace" size="large" onAction="Callback1" />
<button id="customButton2" label="JG Button 2" imageMso="PictureBrightnessGallery" size="large" onAction="Callback2" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

удалите весь код, который был сгенерирован в CUIE, а затем вставьте приведенный выше код вместо этого. Сохраните и закройте CUIE. Теперь при открытии файла Excel он будет выглядеть так:

enter image description here

теперь кодовая часть. Откройте редактор VBA, вставьте модуль и вставьте этот код:

Public Sub Callback1(control As IRibbonControl)

    MsgBox "You pressed Happy Face"

End Sub

Public Sub Callback2(control As IRibbonControl)

    MsgBox "You pressed the Sun"

End Sub

сохранить Файл Excel в виде файла с поддержкой макросов. Теперь при нажатии на смайлик или солнце вы увидите соответствующее окно сообщения:

enter image description here

надеюсь, что это помогает!

я смог сделать это с помощью VBA в Excel 2013. Никаких специальных редакторов не требуется. Все, что вам нужно, это редактор кода Visual Basic, который можно получить на вкладке разработчик. Вкладка Разработчик не отображается по умолчанию, поэтому ее необходимо включить в меню Файл>Параметры>Настроить ленту. На вкладке разработчик нажмите кнопку Visual Basic. Запустится редактор кода. Щелкните правой кнопкой мыши на панели Обозреватель проектов слева. Щелкните меню Вставка и выберите модуль. Добавить оба под замену на новый модуль.

Sub LoadCustRibbon()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI      xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + "  <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "      <mso:tab id='reportTab' label='Reports' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + "        <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + "          <mso:button id='runReport' label='PTO' "   & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3'      onAction='GenReport'/>" & vbNewLine
ribbonXML = ribbonXML + "        </mso:group>" & vbNewLine
ribbonXML = ribbonXML + "      </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + "    </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "  </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"

ribbonXML = Replace(ribbonXML, """", "")

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Sub ClearCustRibbon()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI           xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

вызов подпрограммы LoadCustRibbon в Wookbook открыть еще и вызов Sub ClearCustRibbon в случае Before_Close файла код файл thisworkbook.

Я боролся, как сумасшедший, но это действительно правильный ответ. Для чего это стоит, то, что я пропустил было это:

  1. как говорят другие, нельзя создать ленту CustomUI с помощью VBA,, вам не надо!
  2. идея заключается в создании кода xml-ленты с помощью файла Excel > Параметры > Настроить ленту, а затем экспортировать ленту В a .customUI файл (это просто txt файл, с xml в нем)
  3. сейчас идет трюк вы можете включить the .customUI код в вашем .xlsm-файл с помощью инструмента MS, на который они ссылаются здесь, путем копирования кода из .customUI file
  4. как только он включен в .xlsm файл, каждый раз, когда вы открываете его, лента, которую вы определили добавил на ленту пользователя - но используйте или вы потеряете остальную часть ленты. При выходе из книги лента удаляется.
  5. отсюда все просто, создайте свою ленту, скопируйте xml-код, специфичный для вашей ленты.customUI файл, и поместите его в оболочку, как показано выше (... ваш xml

кстати страница, которая объясняет это на сайте Рона теперь находится на http://www.rondebruin.nl/win/s2/win002.htm

и вот его пример о том, как вы включаете / отключаете кнопки на ленте http://www.rondebruin.nl/win/s2/win013.htm

для других примеры XML лент, пожалуйста, Также см. http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx

ответы здесь относятся к использованию пользовательского редактора пользовательского интерфейса. Я потратил некоторое время на создание интерфейса без этой замечательной программы, поэтому я документирую решение здесь, чтобы помочь кому-либо еще решить, нужен ли им этот пользовательский редактор пользовательского интерфейса или нет.

я наткнулся на следующую веб-страницу справки microsoft -https://msdn.microsoft.com/en-us/library/office/ff861787.aspx. Это показывает, как настроить интерфейс вручную, но у меня были некоторые проблемы при указании на мой пользовательский код надстройки.

чтобы получить кнопки для работы с пользовательскими макросами, установите макрос в вашем .xlam subs для вызова, как описано в этом ответе SO -вызов макроса excel с ленты. В принципе, вам нужно будет добавить этот параметр "control As IRibbonControl" в любой модуль, указанный из вашего XML-файла ленты. Кроме того, ваша лента xml должна иметь onAction="myaddin!сборка mymodule.вызвать" синтаксис, чтобы правильно назвать все модули, загруженные добавить в.

используя эти инструкции я смог создать надстройку excel (.xlam file), который имеет пользовательскую вкладку, загруженную, когда мой VBA загружается в Excel вместе с надстройкой. Кнопки выполняют код из надстройки, а пользовательская вкладка удаляется при удалении надстройки.

в дополнение к Roi-Kyi Bryant answer, этот код полностью работает в Excel 2010. Нажмите ALT + F11 и появится редактор VBA. Дважды щелкните на ThisWorkbook С левой стороны, затем вставьте этот код:

Private Sub Workbook_Activate()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI      xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + "  <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "      <mso:tab id='reportTab' label='My Actions' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + "        <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + "          <mso:button id='runReport' label='Trim' " & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3'      onAction='TrimSelection'/>" & vbNewLine
ribbonXML = ribbonXML + "        </mso:group>" & vbNewLine
ribbonXML = ribbonXML + "      </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + "    </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "  </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"

ribbonXML = Replace(ribbonXML, """", "")

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Private Sub Workbook_Deactivate()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI           xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Не забудьте сохранить и снова открыть книгу. Надеюсь, это поможет!