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
.xlam
pliki Chart Tools.xlam
i 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
customUI
i _rels
.
- W każdym
customUI
folderze utwórz customUI.xml
plik. W customUI.xml
pliku jak pliki Excel interakcji z wstążką. Część 2 przewodnika Microsoft obejmuje elementy w customUI.xml
pliku.
Mój customUI.xml
plik dla Chart Tools.xlam
wyglą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.xml
plik dla Priveleged UDFs.xlam
wyglą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
.zip
do jego nazwy. W moim przypadku zmieniłem nazwę Chart Tools.xlam
na Chart Tools.xlam.zip
i Privelged UDFs.xlam
na Priveleged UDFs.xlam.zip
.
- Otwórz każdy
.zip
plik i przejdź do _rels
folderu. Skopiuj .rels
plik do _rels
folderu 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 .rels
plik dla Chart Tools.xlam
wyglą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 .rels
plik dla Priveleged UDFs
wyglą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
.rels
pliki w każdym .zip
pliku .rels
plikiem / plikami zmodyfikowanymi w poprzednim kroku.
- Skopiuj i wklej utworzony
.customUI
folder do katalogu domowego .zip
pliku / plików.
- Usuń
.zip
rozszerzenie pliku z utworzonych plików programu Excel .
- Jeśli utworzyłeś
.xlam
pliki, 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
onAction
moje przyciski zawierają słowa kluczowe. Słowo onAction
kluczowe wskazuje, że po uruchomieniu elementu zawierającego aplikacja Excel wyzwoli podprogram w cudzysłowie bezpośrednio po onAction
słowie kluczowym. Nazywa się to oddzwonieniem . W moich .xlam
plikach mam moduł o nazwie, w CallBacks
którym zawarłem podprogramy wywołania zwrotnego.
Wygląda CallBacks
na 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 CallBacks
na 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
idQ
i xlmns:
. W moim przykładzie oba Chart Tools.xlam
i Priveleged UDFs.xlam
mają dostęp do elementów z idQ
równymi x:chartToolsTab
i x:privelgedUDFsTab
. W tym celu do pracy, x:
wymagane jest, a ja jej nazw zdefiniowane w pierwszej linii mojego customUI.xml
pliku <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
isMSO
słowa kluczowego. Sekcja Dwa sposoby dostosowywania Fluent UI w przewodniku Microsoft zawiera więcej szczegółów.