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