Как добавить пользовательскую вкладку ленты с помощью 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 ответов
AFAIK вы не можете использовать VBA Excel для создания пользовательской вкладки на ленте Excel. Однако вы можете скрыть/сделать видимым компонент ленты с помощью VBA. Кроме того, ссылка, упомянутая выше, предназначена для MS Project, а не для MS Excel.
Я создаю вкладки для моих приложений/надстроек Excel с помощью этой бесплатной утилиты под названием пользовательский интерфейс редактора.
Edit: для размещения нового запроса OP
учебник
здесь краткий учебник, как и было обещано:
-
после установки пользовательского редактора пользовательского интерфейса (CUIE), откройте его, а затем нажмите на Файл | Открыть и выберите соответствующий файл Excel. Пожалуйста, убедитесь, что файл Excel закрыт, прежде чем открыть его через CUIE. В качестве примера я использую новый рабочий лист.
-
щелкните правой кнопкой мыши, как показано на рисунке ниже, и нажмите "Office 2007 Custom UI Part". Это будет вставить "использования customui.XML-код"
-
далее нажмите на вкладку меню Вставка / пример XML / Custom. Вы заметите, что основной код генерируется автоматически. Теперь вы все готовы редактировать его в соответствии с вашими требованиями.
-
давайте проверим код
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 это будет выглядеть так:
теперь часть кода. Откройте редактор 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 как файл с поддержкой макросов. Теперь при нажатии на смайлик или солнце вы увидите соответствующее окно сообщения:
надеюсь, что это помогает!
я смог выполнить это с помощью VBA в Excel 2013. Никаких специальных редакторов не требуется. Все, что вам нужно, это редактор кода Visual Basic, который можно получить на вкладке разработчик. Вкладка Разработчик по умолчанию не отображается, поэтому ее необходимо включить в меню Файл>Параметры>Настроить ленту. На вкладке разработчик нажмите кнопку Visual Basic. Запустится редактор кода. Щелкните правой кнопкой мыши на панели Project Explorer слева. Щелкните меню Вставка и выберите модуль. Добавить оба под замену на новый модуль.
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 sub в Wookbook open even и вызовите clearcustribbon sub в событии Before_Close файла кода ThisWorkbook.
Я боролся, как сумасшедший, но это действительно правильный ответ. Для чего это стоит, то, что я пропустил было это:
- как говорят другие, нельзя создать ленту CustomUI с помощью VBA,, вам не надо!
- идея заключается в том, что вы создаете код XML-ленты, используя файл Excel > Параметры > Настроить ленту, а затем экспортируете ленту В a .customUI файл (это просто txt файл, с xml в нем)
- сейчас идет трик!--5--> вы можете включить the .код customUI в вашем .xlsm-файл с помощью инструмента MS, на который они ссылаются здесь, путем копирования кода из .файл customUI
- как только он будет включен в.xlsm файл, каждый раз, когда вы открываете его, лента, которую вы определили добавил к ленте пользователя-но используйте или вы потеряете остальную часть ленты. При выходе из книги лента удаляется.
- отсюда это просто, создайте ленту, скопируйте из нее 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
ответы здесь специфичны для использования пользовательского редактора пользовательского интерфейса. Я потратил некоторое время на создание интерфейса без этой замечательной программы, поэтому я документирую решение здесь, чтобы помочь кому-то еще решить, нужен ли им этот пользовательский редактор UI или нет.
я наткнулся на следующую веб-страницу справки microsoft -https://msdn.microsoft.com/en-us/library/office/ff861787.aspx. Это показывает, как настроить интерфейс вручную, но у меня были некоторые проблемы при указании на мой пользовательский код надстройки.
чтобы заставить кнопки работать с вашими пользовательскими макросами, настройте макрос в своем .xlam subs, который будет называться, как описано в этом ответе SO -вызов макроса excel с ленты. В принципе, вам нужно добавить этот параметр "control As IRibbonControl" в любой модуль, указанный из xml-файла ленты. Кроме того, ваша лента xml должна иметь onAction= " myaddin!сборка mymodule.mysub " синтаксис для правильного вызова любых модулей, загруженных add in.
используя эти инструкции я смог создать Excel add in (.xlam-файл), который имеет пользовательскую вкладку, загруженную, когда мой VBA загружается в Excel вместе с добавлением. Кнопки выполняют код из надстройки, а пользовательская вкладка удаляется при удалении надстройки.
в дополнение к ответу Roi-Kyi Bryant этот код полностью работает в 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
Не забудьте сохранить и снова открыть книгу. Надеюсь, это поможет!