Napotkałem trudności z rozwiązaniem Roi-Kyi Bryanta, gdy wiele dodatków próbowało zmodyfikować wstążkę. Nie mam też dostępu administratora na moim komputerze roboczym, co wykluczało zainstalowanie Custom UI Editor. Jeśli więc jesteś na tej samej łodzi co ja, oto alternatywny przykład dostosowywania wstążki za pomocą tylko programu Excel. Uwaga, moje rozwiązanie pochodzi z przewodnika Microsoft .
- Utwórz plik / pliki Excela, których wstążki chcesz dostosować. W moim przypadku utworzyłem dwa
.xlampliki Chart Tools.xlami Priveleged UDFs.xlam, aby zademonstrować, jak wiele dodatków może współdziałać ze Wstążką.
- Utwórz folder o dowolnej nazwie dla każdego właśnie utworzonego pliku.
- W każdym utworzonym folderze dodaj folder
customUIi _rels.
- W każdym
customUIfolderze utwórz customUI.xmlplik. W customUI.xmlpliku jak pliki Excel interakcji z wstążką. Część 2 przewodnika Microsoft obejmuje elementy w customUI.xmlpliku.
Mój customUI.xmlplik dla Chart Tools.xlamwygląda tak
<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>
Mój customUI.xmlplik dla Priveleged UDFs.xlamwygląda tak
<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>
- Dla każdego pliku utworzonego w kroku 1 dodaj przyrostek a
.zipdo jego nazwy. W moim przypadku zmieniłem nazwę Chart Tools.xlamna Chart Tools.xlam.zipi Privelged UDFs.xlamna Priveleged UDFs.xlam.zip.
- Otwórz każdy
.zipplik i przejdź do _relsfolderu. Skopiuj .relsplik do _relsfolderu utworzonego w kroku 3. Edytuj każdy .rels plik za pomocą edytora tekstu. Z przewodnika Microsoft
Pomiędzy ostatnim <Relationship>elementem a elementem zamykającym
<Relationships>dodaj linię, która tworzy relację między plikiem dokumentu a plikiem dostosowywania. Upewnij się, że poprawnie określisz nazwy folderów i plików.
<Relationship Type="http://schemas.microsoft.com/office/2006/
relationships/ui/extensibility" Target="/customUI/customUI.xml"
Id="customUIRelID" />
Mój .relsplik dla Chart Tools.xlamwygląda tak
<?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>
Mój .relsplik dla Priveleged UDFswygląda tak.
<?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>
- Zastąp
.relspliki w każdym .zippliku .relsplikiem / plikami zmodyfikowanymi w poprzednim kroku.
- Skopiuj i wklej utworzony
.customUIfolder do katalogu domowego .zippliku / plików.
- Usuń
.ziprozszerzenie pliku z utworzonych plików programu Excel .
- Jeśli utworzyłeś
.xlampliki, z powrotem w programie Excel, dodaj je do dodatków programu Excel.
- Jeśli ma to zastosowanie, utwórz wywołania zwrotne w każdym z dodatków. W kroku 4
onActionmoje przyciski zawierają słowa kluczowe. Słowo onActionkluczowe wskazuje, że po uruchomieniu elementu zawierającego aplikacja Excel wyzwoli podprogram w cudzysłowie bezpośrednio po onActionsłowie kluczowym. Nazywa się to oddzwonieniem . W moich .xlamplikach mam moduł o nazwie, w CallBacksktórym zawarłem podprogramy wywołania zwrotnego.

Wygląda CallBacksna to mój moduł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
Wygląda CallBacksna to mój modułPriveleged UDFs.xlam
Opcja jawna
Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.InitialisePrivelegedUDFs
End Sub
Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub
Różne elementy mają różne sygnatury podprogramu wywołania zwrotnego. W przypadku przycisków wymagany parametr procedury podrzędnej to ByRef control As IRibbonControl. Jeśli nie spełnisz wymaganej sygnatury wywołania zwrotnego, podczas kompilowania projektu / projektów VBA pojawi się błąd. Część 3 przewodnika Microsoft definiuje wszystkie podpisy wywołań zwrotnych.
Oto jak wygląda mój gotowy przykład

Kilka wskazówek na zakończenie
- Jeśli chcesz, aby dodatki współdzieliły elementy wstążki, użyj słowa kluczowego
idQi xlmns:. W moim przykładzie oba Chart Tools.xlami Priveleged UDFs.xlammają dostęp do elementów z idQrównymi x:chartToolsTabi x:privelgedUDFsTab. W tym celu do pracy, x:wymagane jest, a ja jej nazw zdefiniowane w pierwszej linii mojego customUI.xmlpliku <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">. Sekcja Dwa sposoby dostosowywania Fluent UI w przewodniku Microsoft zawiera więcej szczegółów.
- Jeśli chcesz, aby dodatki miały dostęp do elementów wstążki dostarczanych z programem Excel, użyj
isMSOsłowa kluczowego. Sekcja Dwa sposoby dostosowywania Fluent UI w przewodniku Microsoft zawiera więcej szczegółów.