Ich hatte Probleme mit der Lösung von Roi-Kyi Bryant, als mehrere Add-Ins versuchten, das Menüband zu ändern. Ich habe auch keinen Administratorzugriff auf meinem Arbeitscomputer, was die Installation von ausgeschlossen hat Custom UI Editor
. Wenn Sie sich also im selben Boot wie ich befinden, finden Sie hier ein alternatives Beispiel zum Anpassen des Menübands nur mit Excel. Beachten Sie, dass meine Lösung aus dem Microsoft-Handbuch abgeleitet ist .
- Erstellen Sie Excel-Dateien, deren Bänder Sie anpassen möchten. In meinem Fall habe ich zwei
.xlam
Dateien erstellt Chart Tools.xlam
und Priveleged UDFs.xlam
, um zu demonstrieren, wie mehrere Add-Ins mit der Multifunktionsleiste interagieren können.
- Erstellen Sie für jede gerade erstellte Datei einen Ordner mit einem beliebigen Ordnernamen .
- Fügen Sie in jedem der von Ihnen erstellten Ordner einen
customUI
und einen _rels
Ordner hinzu.
customUI
Erstellen Sie in jedem Ordner eine customUI.xml
Datei. Die customUI.xml
Datei beschreibt, wie Excel-Dateien mit dem Menüband interagieren. Teil 2 des Microsoft-Handbuchs behandelt die Elemente in der customUI.xml
Datei.
Meine customUI.xml
Datei für Chart Tools.xlam
sieht so aus
<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>
Meine customUI.xml
Datei für Priveleged UDFs.xlam
sieht so aus
<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>
- Fügen Sie für jede Datei, die Sie in Schritt 1 erstellt haben, ein Suffix a
.zip
an den Dateinamen an. In meinem Fall, ich umbenannt Chart Tools.xlam
zu Chart Tools.xlam.zip
, und Privelged UDFs.xlam
zu Priveleged UDFs.xlam.zip
.
- Öffnen Sie jede
.zip
Datei und navigieren Sie zum _rels
Ordner. Kopieren Sie die .rels
Datei in den _rels
Ordner, den Sie in Schritt 3 erstellt haben. Bearbeiten Sie jede .rels
Datei mit einem Texteditor. Aus dem Microsoft-Handbuch
Fügen Sie zwischen dem letzten <Relationship>
Element und dem schließenden
<Relationships>
Element eine Zeile hinzu, die eine Beziehung zwischen der Dokumentdatei und der Anpassungsdatei herstellt. Stellen Sie sicher, dass Sie die Ordner- und Dateinamen korrekt angeben.
<Relationship Type="http://schemas.microsoft.com/office/2006/
relationships/ui/extensibility" Target="/customUI/customUI.xml"
Id="customUIRelID" />
Meine .rels
Datei für Chart Tools.xlam
sieht so aus
<?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>
Meine .rels
Datei für Priveleged UDFs
sieht so aus.
<?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>
- Ersetzen Sie die
.rels
Dateien in jeder .zip
Datei durch die .rels
Datei / Dateien, die Sie im vorherigen Schritt geändert haben.
- Kopieren
.customUI
Sie den von Ihnen erstellten Ordner und fügen Sie ihn in das Ausgangsverzeichnis der .zip
Datei / Dateien ein.
- Entfernen Sie die
.zip
Dateierweiterung aus den von Ihnen erstellten Excel-Dateien .
- Wenn Sie
.xlam
Dateien erstellt haben , fügen Sie sie wieder in Excel zu Ihren Excel-Add-Ins hinzu.
- Erstellen Sie gegebenenfalls Rückrufe in jedem Ihrer Add-Ins. In Schritt 4 befinden sich
onAction
Schlüsselwörter in meinen Schaltflächen. Das onAction
Schlüsselwort gibt an, dass die Excel-Anwendung beim Auslösen des enthaltenen Elements die in Anführungszeichen eingeschlossene Unterroutine direkt nach dem onAction
Schlüsselwort auslöst . Dies wird als Rückruf bezeichnet . In meinen .xlam
Dateien habe ich ein Modul namens, CallBacks
in das ich meine Rückruf-Subroutinen aufgenommen habe.
Mein CallBacks
Modul für Chart Tools.xlam
sieht aus wie
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
Mein CallBacks
Modul fürPriveleged UDFs.xlam
sieht aus wie
Option Explizit
Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.InitialisePrivelegedUDFs
End Sub
Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub
Verschiedene Elemente haben eine unterschiedliche Signatur der Rückruf-Subroutine. Für Schaltflächen ist der erforderliche Subroutinenparameter ByRef control As IRibbonControl
. Wenn Sie nicht der erforderlichen Rückrufsignatur entsprechen, wird beim Kompilieren Ihres VBA-Projekts / Ihrer VBA-Projekte eine Fehlermeldung angezeigt. Teil 3 des Microsoft-Handbuchs definiert alle Rückrufsignaturen.
So sieht mein fertiges Beispiel aus
Einige abschließende Tipps
- Wenn Sie möchten, dass Add-Ins Multifunktionsleistenelemente gemeinsam nutzen, verwenden Sie das Schlüsselwort
idQ
und xlmns:
. In meinem Beispiel haben die Chart Tools.xlam
und Priveleged UDFs.xlam
beide Zugriff auf die Elemente mit idQ
's gleich x:chartToolsTab
und x:privelgedUDFsTab
. Damit dies funktioniert, x:
ist das erforderlich, und ich habe seinen Namespace in der ersten Zeile meiner customUI.xml
Datei definiert <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
. Der Abschnitt Zwei Möglichkeiten zum Anpassen der fließenden Benutzeroberfläche im Microsoft-HandbuchWeitere Informationen finden Sie .
- Verwenden Sie das
isMSO
Schlüsselwort, wenn Add-Ins auf mit Excel gelieferte Multifunktionsleistenelemente zugreifen sollen . Weitere Informationen finden Sie im Abschnitt Zwei Möglichkeiten zum Anpassen der fließenden Benutzeroberfläche im Microsoft-Handbuch .