Як додати користувацьку вкладку Стрічки за допомогою VBA?


98

Я шукаю спосіб додати спеціальну вкладку на стрічці 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

Підтвердьте, яку версію Excel ви використовуєте?
Siddharth Rout

Це для Проекту.
Nathan_Sav

Відповіді:


146

AFAIK ви не можете використовувати VBA Excel для створення власної вкладки на стрічці Excel. Однак ви можете приховати / зробити видимим компонент стрічки за допомогою VBA. Крім того, посилання, яке ви згадали вище, стосується MS Project, а не MS Excel.

Я створюю вкладки для своїх додатків / додатків Excel за допомогою цієї безкоштовної утиліти під назвою Редактор користувальницьких інтерфейсів .


Редагувати: щоб прийняти новий запит від ОП

Навчальний посібник

Ось короткий підручник, як обіцяли:

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

    введіть тут опис зображення

  2. Клацніть правою кнопкою миші, як показано на зображенні нижче, і натисніть "Частина користувальницького інтерфейсу Office 2007". У нього буде вставлено "customUI.xml"

    введіть тут опис зображення

  3. Далі Клацніть на меню Вставити | Зразок XML | Спеціальна вкладка. Ви помітите, що базовий код генерується автоматично. Тепер ви готові редагувати його відповідно до своїх вимог.

    введіть тут опис зображення

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

    введіть тут опис зображення

    label="Custom Tab": Замініть "Спеціальна вкладка" на ім'я, якому ви хочете дати свою вкладку. Наразі назвемо це "Джеронім".

    У нижній частині додається спеціальна кнопка.

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

    imageMso: Це зображення, яке відображатиметься на кнопці. "HappyFace" - це те, що ви побачите на даний момент. Ви можете завантажити більше ідентифікаторів зображення тут .

    onAction="Callback": "Зворотний виклик" - це назва процедури, яка запускається при натисканні на кнопку.

Демо

За допомогою цього створимо 2 кнопки та назвемо їх "Кнопка JG 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 як файл із підтримкою макросу. Тепер, натиснувши на Смайлик або Сонце, ви побачите відповідне поле повідомлень:

введіть тут опис зображення

Сподіваюся, це допомагає!


6
Так :) Рон має багато прикладів на своєму веб-сайті. rondebruin.nl/ribbon.htm
Siddharth Rout

1
Ви хочете створити нову вкладку? Якщо так, то надайте більше деталей, і я надішлю вам XML-код :)
Siddharth Rout

1
Дайте 20 хвилин Оновлення вищезгаданої публікації відповідним кодом та знімками :)
Siddharth Rout

6
@SiddharthRout +1 - Я з’ясував, що мені не потрібні книги Excel, просто слідкуйте за своїми повідомленнями про те, що мені потрібно навчитися протягом днів (а цього вечора це Стрічка XML!) :)
Наша людина в Банани

1
Я рекомендую створити з вами новий Quesiton базовий xml-код та код VBA, і тоді ми можемо взяти його там? @YasserKhalil
Siddharth Rout

30

Мені вдалося досягти цього за допомогою VBA в Excel 2013. Не потрібно спеціальних редакторів. Все, що вам потрібно, це редактор коду Visual Basic, доступ до якого можна отримати на вкладці Developer. Вкладка розробника за замовчуванням не відображається, тому її потрібно ввімкнути у меню Файл> Параметри> Налаштувати стрічку. На вкладці Developer натисніть кнопку 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 навіть відкрийте та зателефонуйте на підрозділ ClearCustRibbon у події "Перед_закрити" цього коду.


Це працювало для мене, але я мав лише пару незначних питань, до яких я стикався. 1) Якщо я зберігав події Before_Close, нова стрічка не завантажувалася. 2) Коли мені вдалося змусити стрічку працювати, видаливши подію Before_Close, мені довелося перезавантажити Excel, перш ніж вона з’явиться. Якби ви могли порадити, чому це відбувається, це було б чудово!
Petay87

Чи код точно такий же? Чи можете ви розмістити його? Ідея полягає в тому, що Excel повинен змінити стандартний файл стрічки перед завантаженням стрічки та скинути її до закриття робочої книги. Скидання стрічки необхідно, щоб вона не відображалася в інших робочих зошитах.
Roi-Kyi Bryant

3
Цей код замінює всі поточні налаштування стрічки, які користувач, можливо, вже зробив.
WizzleWuzzle

@WizzleWuzzle Не потрібно. Стрічку можна було імпортувати та розібрати в об'єкт, який можна було пройти. Потім до об’єкта можуть бути додані нові елементи. Результат можна зберегти у файл. Питання полягало в тому, як створити власну стрічку; а не як змінити існуючий.
Рой-Кий Брайант

1
@ Roi-Kyi-Bryant Питання полягало в тому, щоб додати спеціальний елемент стрічки, а не перезаписати всю поточну власну стрічку. Цей код перезаписує поточну стрічку.
WizzleWuzzle

24

Я боровся як божевільний, але це насправді правильна відповідь. Що варто, те, що я пропустив, це таке:

  1. Як кажуть інші, не можна створити стрічку CustomUI за допомогою VBA, однак , вам цього не потрібно!
  2. Ідея полягає в тому, щоб ви створили свій Xml-код стрічки за допомогою файлу Excel> Параметри> Налаштувати стрічку, а потім експортуйте Стрічку до файлу .customUI (це лише файл txt, в якому є xml)
  3. Тепер приходить хитрість : ви можете включити .customUI код у свій .xlsm файл, використовуючи інструмент MS, про який вони посилаються тут, скопіювавши код з файлу .customUI
  4. Після того, як він включений у файл .xlsm, кожного разу, коли ви його відкриваєте, визначена вами стрічка додається до стрічки користувача, але використовуйте <ribbon startFromScratch = "false"> або ви втрачаєте решту стрічки. Після виходу з робочої книги стрічку знімають.
  5. З цього моменту просто, створіть стрічку, скопіюйте XML-код, характерний для вашої стрічки, з файлу .customUI та помістіть її в обгортку, як показано вище (... <tabs> ваш xml </ tabs .. .)

До речі, сторінка, яка пояснює це на сайті Рона, зараз знаходиться на веб- сайті 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


2
Все-таки (5 років потому) найкраща відповідь, на мій погляд, і, можливо, OP @BuZz хотів би оновити оригінальний пост, принаймні вказуючи на цю відповідь (?). Я ледве знайшов це, як він лежав у дні досить довгого списку відповідей.
Chri.s

18

Тут наведені відповіді специфічні для використання користувальницького редактора інтерфейсу. Я витратив деякий час на створення інтерфейсу без чудової програми, тому я документую рішення, щоб допомогти іншим вирішити, чи потрібен їм користувальницький редактор інтерфейсу чи ні.

Я натрапив на таку веб-сторінку допомоги Microsoft - https://msdn.microsoft.com/en-us/library/office/ff861787.aspx . Це показує, як налаштувати інтерфейс вручну, але у мене виникли проблеми при вказівці на мій спеціальний код надбудови.

Щоб кнопки могли працювати з вашими користувальницькими макросами, встановіть макрос у своїх .xlam абонентах, щоб їх називали так, як описано у цій відповіді ТА - Виклик макросу Excel зі стрічки . В основному, вам потрібно буде додати цей параметр "control As IRibbonControl" до будь-якого модуля, вказаного на стрічці xml. Крім того, ваша стрічка xml повинна мати синтаксис onAction = "myaddin! Mymodule.mysub", щоб правильно викликати будь-які модулі, завантажені додаванням.

Використовуючи ці вказівки, я зміг створити додаток Excel у (.xlam-файл), який має власну вкладку, завантажену, коли мій VBA завантажується в Excel разом з надбудовою. Кнопки виконують код із добудови, а власна вкладка видаляється, коли Я видаляю надбудову.


1
Це працює для тих, хто не має всіх інструментів розвитку. Дякую за "просте" рішення
Еван

2
Я раніше навчав своїх студентів другого курсу програмуванню цього методу, але врешті-решт виявив, що використовувати інструмент CustomUI просто менш складно, якщо ви можете отримати доступ до нього.
Рік Хендерсон

8

Окрім відповіді Рой-Киї Брайант, цей код повністю працює у програмі 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

Не забудьте зберегти та знову відкрити робочу книжку. Сподіваюся, це допомагає!


Як би ви передали аргументи з цим? Я використовував це, але не можу знайти спосіб передавати аргументи.
jDave1984

Використовуючи мою відповідь, ви додасте список аргументів до кожної підпрограми Щось на зразок LoadCustomRibbon (tabName як String, groupName як String, btnName як String). Потім зателефонуйте в ці підпрограми у відповідне місце, як вказував @Erikas.
Roi-Kyi Bryant

6

У мене виникли труднощі з рішенням Рой-Кі Брайант, коли кілька надбудов намагалися змінити стрічку. Я також не маю доступу адміністратора на своєму робочому комп’ютері, який виключав установку Custom UI Editor. Отже, якщо ви перебуваєте в тому ж човні, що і я, ось альтернативний приклад налаштування стрічки за допомогою лише Excel. Зауважте, моє рішення походить із посібника Microsoft .


  1. Створіть файл / файли Excel, стрічки яких потрібно налаштувати. У моєму випадку я створив два .xlamфайли Chart Tools.xlamі Priveleged UDFs.xlam, щоб продемонструвати, як декілька надбудов можуть взаємодіяти з Стрічкою.
  2. Створіть папку з будь-яким ім'ям папки для кожного файлу, який ви тільки що створили.
  3. Всередину кожної створеної вами папки додайте папку customUIта _rels.
  4. Всередині кожної customUIпапки створіть customUI.xmlфайл. У customUI.xmlфайлі докладно описано взаємодію файлів Excel із стрічкою. Частина 2 керівництва Microsoft охоплює елементи у customUI.xmlфайлі.

Мій customUI.xmlфайл для Chart Tools.xlamвиглядає приблизно так

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
  <ribbon>
    <tabs>
      <tab idQ="x:chartToolsTab" label="Chart Tools">
        <group id="relativeChartMovementGroup" label="Relative Chart Movement" >
            <button id="moveChartWithRelativeLinksButton" label="Copy and Move" imageMso="ResultsPaneStartFindAndReplace" onAction="MoveChartWithRelativeLinksCallBack" visible="true" size="normal"/>
            <button id="moveChartToManySheetsWithRelativeLinksButton" label="Copy and Distribute" imageMso="OutlineDemoteToBodyText" onAction="MoveChartToManySheetsWithRelativeLinksCallBack" visible="true" size="normal"/>
        </group >
        <group id="chartDeletionGroup" label="Chart Deletion">
            <button id="deleteAllChartsInWorkbookSharingAnAddressButton" label="Delete Charts" imageMso="CancelRequest" onAction="DeleteAllChartsInWorkbookSharingAnAddressCallBack" visible="true" size="normal"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

Мій customUI.xmlфайл для Priveleged UDFs.xlamвиглядає приблизно так

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
  <ribbon>
    <tabs>
      <tab idQ="x:privelgedUDFsTab" label="Privelged UDFs">
        <group id="privelgedUDFsGroup" label="Toggle" >
            <button id="initialisePrivelegedUDFsButton" label="Activate" imageMso="TagMarkComplete" onAction="InitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
            <button id="deInitialisePrivelegedUDFsButton" label="De-Activate" imageMso="CancelRequest" onAction="DeInitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
        </group >
      </tab>
    </tabs>
  </ribbon>
</customUI>
  1. Для кожного файлу, створеного на кроці 1, суфікс a .zipдо їх імені файлу. У моєму випадку, я перейменував Chart Tools.xlamв Chart Tools.xlam.zipі Privelged UDFs.xlamдо Priveleged UDFs.xlam.zip.
  2. Відкрийте кожен .zipфайл і перейдіть до _relsпапки. Скопіюйте .relsфайл у _relsпапку, створену на кроці 3. Відредагуйте кожен .rels файл за допомогою текстового редактора. З посібника Microsoft

Між кінцевим <Relationship>елементом та елементом, що закриває <Relationships>, додайте рядок, який створює зв'язок між файлом документа та файлом налаштування. Переконайтесь, що ви правильно вказали імена папок та файлів.

<Relationship Type="http://schemas.microsoft.com/office/2006/
  relationships/ui/extensibility" Target="/customUI/customUI.xml" 
  Id="customUIRelID" />

Мій .relsфайл для Chart Tools.xlamвиглядає приблизно так

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
        <Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="chartToolsCustomUIRel" />
    </Relationships>

Мій .relsфайл для Priveleged UDFsвиглядає приблизно так.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
        <Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="privelegedUDFsCustomUIRel" />
    </Relationships>
  1. Замініть .relsфайли в кожному .zipфайлі на .relsфайл / файли, які ви змінили на попередньому кроці.
  2. Скопіюйте та вставте .customUIстворену вами папку в домашній каталог .zipфайлу / файлів.
  3. Видаліть .zipрозширення файлу з створених файлів Excel .
  4. Якщо ви створили .xlamфайли ще в Excel, додайте їх до своїх додатків Excel.
  5. Якщо потрібно, створіть зворотні дзвінки в кожному з своїх надбудов. На кроці 4 onActionв моїх кнопках є ключові слова. onActionКлючове слово вказує на те, що, коли зміст елемента запускається додаток Excel викличе підпрограму , укладена в лапки безпосередньо після onActionключового слова. Це відоме як зворотний дзвінок . У своїх .xlamфайлах у мене є модуль, який називається, CallBacksкуди я включив підпрограми зворотного виклику.

Модуль викликів

Мій CallBacksмодуль для Chart Tools.xlamвигляду виглядає так

Option Explicit

Public Sub MoveChartWithRelativeLinksCallBack(ByRef control As IRibbonControl)
  MoveChartWithRelativeLinks
End Sub

Public Sub MoveChartToManySheetsWithRelativeLinksCallBack(ByRef control As IRibbonControl)
  MoveChartToManySheetsWithRelativeLinks
End Sub

Public Sub DeleteAllChartsInWorkbookSharingAnAddressCallBack(ByRef control As IRibbonControl)
  DeleteAllChartsInWorkbookSharingAnAddress
End Sub

Мій CallBacksмодуль для Priveleged UDFs.xlamвигляду виглядає так

Варіант явний

Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
  ThisWorkbook.InitialisePrivelegedUDFs
End Sub

Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
  ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub

Різні елементи мають різні підпрограми підпису зворотного виклику. Для кнопок необхідний параметр підпрограми - це ByRef control As IRibbonControl. Якщо ви не відповідаєте необхідному підпису зворотного дзвінка, ви отримаєте помилку під час компіляції вашого проекту / проектів VBA. Частина 3 керівництва Microsoft визначає всі підписи зворотного дзвінка.


Ось як виглядає мій готовий приклад

Закінчений продукт


Деякі закривальні поради

  1. Якщо ви хочете, щоб надбудови спільно використовували елементи стрічки, використовуйте ключове слово idQта xlmns:. У моєму прикладі, Chart Tools.xlamі Priveleged UDFs.xlamобидва мають доступ до елементів з idQ's дорівнює x:chartToolsTabта x:privelgedUDFsTab. Для цього роботу, x:потрібно, і я визначив свій простір імен в першому рядку мого customUI.xmlфайлу <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">. У розділі Два способи налаштування плавного інтерфейсу користувача в посібнику Майкрософт наведено додаткові деталі.
  2. Якщо ви хочете, щоб надбудови отримували доступ до елементів стрічки, що постачаються разом з Excel, використовуйте isMSOключове слово. У розділі Два способи налаштування плавного інтерфейсу користувача в посібнику Майкрософт наведено додаткові деталі.

0

Іншим підходом до цього було б завантажити безкоштовний модуль Open XML класу Яна Карела Пітерсе з цієї сторінки: Редагування елементів у файлі OpenXML за допомогою VBA

Якщо це додано до вашого проекту VBA, ви можете розпакувати файл Excel, використовувати VBA для зміни XML, а потім використовувати клас для повторного завантаження файлів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.