У мене виникли труднощі з рішенням Рой-Кі Брайант, коли кілька надбудов намагалися змінити стрічку. Я також не маю доступу адміністратора на своєму робочому комп’ютері, який виключав установку Custom UI Editor. Отже, якщо ви перебуваєте в тому ж човні, що і я, ось альтернативний приклад налаштування стрічки за допомогою лише Excel. Зауважте, моє рішення походить із посібника Microsoft .
- Створіть файл / файли Excel, стрічки яких потрібно налаштувати. У моєму випадку я створив два
.xlamфайли Chart Tools.xlamі Priveleged UDFs.xlam, щоб продемонструвати, як декілька надбудов можуть взаємодіяти з Стрічкою.
- Створіть папку з будь-яким ім'ям папки для кожного файлу, який ви тільки що створили.
- Всередину кожної створеної вами папки додайте папку
customUIта _rels.
- Всередині кожної
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, суфікс a
.zipдо їх імені файлу. У моєму випадку, я перейменував Chart Tools.xlamв Chart Tools.xlam.zipі Privelged UDFs.xlamдо Priveleged UDFs.xlam.zip.
- Відкрийте кожен
.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>
- Замініть
.relsфайли в кожному .zipфайлі на .relsфайл / файли, які ви змінили на попередньому кроці.
- Скопіюйте та вставте
.customUIстворену вами папку в домашній каталог .zipфайлу / файлів.
- Видаліть
.zipрозширення файлу з створених файлів Excel .
- Якщо ви створили
.xlamфайли ще в Excel, додайте їх до своїх додатків Excel.
- Якщо потрібно, створіть зворотні дзвінки в кожному з своїх надбудов. На кроці 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 визначає всі підписи зворотного дзвінка.
Ось як виглядає мій готовий приклад

Деякі закривальні поради
- Якщо ви хочете, щоб надбудови спільно використовували елементи стрічки, використовуйте ключове слово
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">. У розділі Два способи налаштування плавного інтерфейсу користувача в посібнику Майкрософт наведено додаткові деталі.
- Якщо ви хочете, щоб надбудови отримували доступ до елементів стрічки, що постачаються разом з Excel, використовуйте
isMSOключове слово. У розділі Два способи налаштування плавного інтерфейсу користувача в посібнику Майкрософт наведено додаткові деталі.