Ich suche nach einer Möglichkeit, eine benutzerdefinierte Registerkarte in der Excel-Multifunktionsleiste hinzuzufügen, die einige Schaltflächen enthält. Ich habe zufällig einige Ressourcen gefunden, die sich über Google damit befassen, aber alle sehen zwielichtig und unglaublich kompliziert aus.
Was ist ein schneller und einfacher Weg, um das zu tun? Ich möchte, dass die neue Registerkarte geladen wird, wenn mein VBA in Excel geladen wird.
UPDATE : Ich habe dieses Beispiel von hier aus ausprobiert , erhalte jedoch bei der letzten Anweisung den Fehler "Objekt erforderlich":
Public Sub AddHighlightRibbon()
Dim ribbonXml As String
ribbonXml = "<mso:customUI xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">"
ribbonXml = ribbonXml + " <mso:ribbon>"
ribbonXml = ribbonXml + " <mso:qat/>"
ribbonXml = ribbonXml + " <mso:tabs>"
ribbonXml = ribbonXml + " <mso:tab id=""highlightTab"" label=""Highlight"" insertBeforeQ=""mso:TabFormat"">"
ribbonXml = ribbonXml + " <mso:group id=""testGroup"" label=""Test"" autoScale=""true"">"
ribbonXml = ribbonXml + " <mso:button id=""highlightManualTasks"" label=""Toggle Manual Task Color"" "
ribbonXml = ribbonXml + "imageMso=""DiagramTargetInsertClassic"" onAction=""ToggleManualTasksColor""/>"
ribbonXml = ribbonXml + " </mso:group>"
ribbonXml = ribbonXml + " </mso:tab>"
ribbonXml = ribbonXml + " </mso:tabs>"
ribbonXml = ribbonXml + " </mso:ribbon>"
ribbonXml = ribbonXml + "</mso:customUI>"
ActiveProject.SetCustomUI (ribbonXml)
End Sub
excel
vba
excel-2007
ribbonx
Summen
quelle
quelle
Antworten:
AFAIK Sie können VBA Excel nicht verwenden, um eine benutzerdefinierte Registerkarte in der Excel-Multifunktionsleiste zu erstellen. Sie können jedoch eine Multifunktionsleisten-Komponente mit VBA ausblenden / sichtbar machen. Darüber hinaus ist der oben erwähnte Link für MS Project und nicht für MS Excel.
Ich erstelle Registerkarten für meine Excel-Anwendungen / Add-Ins mit diesem kostenlosen Dienstprogramm namens Custom UI Editor .
Bearbeiten: Um neue Anforderungen von OP zu berücksichtigen
Lernprogramm
Hier ist ein kurzes Tutorial wie versprochen:
Nachdem Sie den benutzerdefinierten UI-Editor (CUIE) installiert haben, öffnen Sie ihn und klicken Sie auf Datei | Öffnen Sie die entsprechende Excel-Datei und wählen Sie sie aus. Stellen Sie sicher, dass die Excel-Datei geschlossen ist, bevor Sie sie über CUIE öffnen. Ich verwende ein brandneues Arbeitsblatt als Beispiel.
Klicken Sie mit der rechten Maustaste wie in der Abbildung unten gezeigt und klicken Sie auf "Benutzerdefinierte Office 2007-Benutzeroberfläche". Es wird die "customUI.xml" eingefügt.
Weiter Klicken Sie auf das Menü Einfügen | Beispiel XML | Benutzerdefinierte Registerkarte. Sie werden feststellen, dass der Basiscode automatisch generiert wird. Jetzt können Sie es gemäß Ihren Anforderungen bearbeiten.
Lassen Sie uns den Code überprüfen
label="Custom Tab"
: Ersetzen Sie "Benutzerdefinierte Registerkarte" durch den Namen, den Sie Ihrer Registerkarte geben möchten. Nennen wir es vorerst "Hieronymus".Der folgende Teil fügt eine benutzerdefinierte Schaltfläche hinzu.
imageMso
: Dies ist das Bild, das auf der Schaltfläche angezeigt wird. "HappyFace" sehen Sie im Moment. Sie können hier weitere Bild-IDs herunterladen .onAction="Callback"
: "Rückruf" ist der Name der Prozedur, die ausgeführt wird, wenn Sie auf die Schaltfläche klicken.Demo
Erstellen wir damit 2 Schaltflächen und nennen sie "JG Button 1" und "JG Button 2". Lassen Sie uns ein glückliches Gesicht als Bild des ersten behalten und die "Sonne" für das zweite behalten. Der geänderte Code sieht nun folgendermaßen aus:
Löschen Sie den gesamten Code, der in CUIE generiert wurde, und fügen Sie stattdessen den obigen Code ein. Speichern und schließen Sie CUIE. Wenn Sie nun die Excel-Datei öffnen, sieht sie folgendermaßen aus:
Nun der Codeteil. Öffnen Sie den VBA-Editor, fügen Sie ein Modul ein und fügen Sie diesen Code ein:
Speichern Sie die Excel-Datei als makrofähige Datei. Wenn Sie nun auf den Smiley oder die Sonne klicken, wird das entsprechende Meldungsfeld angezeigt:
Hoffe das hilft!
quelle
Dies konnte ich mit VBA in Excel 2013 erreichen. Es sind keine speziellen Editoren erforderlich. Sie benötigen lediglich den Visual Basic-Code-Editor, auf den Sie auf der Registerkarte Entwickler zugreifen können. Die Registerkarte Entwickler ist standardmäßig nicht sichtbar und muss daher unter Datei> Optionen> Multifunktionsleiste anpassen aktiviert werden. Klicken Sie auf der Registerkarte Entwickler auf die Schaltfläche Visual Basic. Der Code-Editor wird gestartet. Klicken Sie mit der rechten Maustaste in den Projekt-Explorer auf der linken Seite. Klicken Sie auf das Einfügemenü und wählen Sie das Modul. Fügen Sie dem neuen Modul beide unten stehenden Subs hinzu.
Rufen Sie das LoadCustRibbon-Sub im Wookbook auf, und öffnen Sie das ClearCustRibbon-Sub im Before_Close-Ereignis der ThisWorkbook-Codedatei.
quelle
Ich kämpfte wie verrückt, aber das ist eigentlich die richtige Antwort. Was es wert ist, was ich vermisst habe, war Folgendes:
Übrigens ist die Seite, die es auf Rons Website erklärt, jetzt bei http://www.rondebruin.nl/win/s2/win002.htm
Und hier ist sein Beispiel, wie Sie Schaltflächen auf der Multifunktionsleiste aktivieren / deaktivieren http://www.rondebruin.nl/win/s2/win013.htm
Weitere XML-Beispiele für Bänder finden Sie auch unter http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx
quelle
Die Antworten hier beziehen sich speziell auf die Verwendung des benutzerdefinierten UI-Editors. Ich habe einige Zeit damit verbracht, die Benutzeroberfläche ohne dieses wunderbare Programm zu erstellen. Deshalb dokumentiere ich hier die Lösung, um anderen zu helfen, zu entscheiden, ob sie diesen benutzerdefinierten UI-Editor benötigen oder nicht.
Ich bin auf die folgende Microsoft-Hilfe-Webseite gestoßen: https://msdn.microsoft.com/en-us/library/office/ff861787.aspx . Dies zeigt, wie die Schnittstelle manuell eingerichtet wird, aber ich hatte einige Probleme, als ich auf meinen benutzerdefinierten Add-In-Code zeigte.
Damit die Schaltflächen mit Ihren benutzerdefinierten Makros funktionieren, richten Sie das Makro in Ihren .xlam-Subs so ein, dass es wie in dieser SO-Antwort beschrieben aufgerufen wird - Aufrufen eines Excel-Makros über die Multifunktionsleiste . Grundsätzlich müssen Sie diesen Parameter "control As IRibbonControl" zu jedem Modul hinzufügen, auf das in Ihrer Multifunktionsleisten-XML verwiesen wird. Außerdem sollte Ihre Multifunktionsleisten-XML die Syntax onAction = "myaddin! Mymodule.mysub" haben, um alle vom Add-In geladenen Module ordnungsgemäß aufzurufen.
Mit diesen Anweisungen konnte ich ein Excel-Add-In (.xlam-Datei) erstellen, auf dem eine benutzerdefinierte Registerkarte geladen ist, wenn mein VBA zusammen mit dem Add-In in Excel geladen wird. Die Schaltflächen führen Code aus dem Add-In aus und die benutzerdefinierte Registerkarte wird deinstalliert, wenn Ich entferne das Add-In.
quelle
Zusätzlich zur Antwort von Roi-Kyi Bryant funktioniert dieser Code vollständig in Excel 2010. Drücken Sie ALT + F11, und der VBA-Editor wird angezeigt. Doppelklicken Sie auf
ThisWorkbook
der linken Seite und fügen Sie diesen Code ein:Vergessen Sie nicht, die Arbeitsmappe zu speichern und erneut zu öffnen. Hoffe das hilft!
quelle
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 ..xlam
Dateien erstelltChart Tools.xlam
undPriveleged UDFs.xlam
, um zu demonstrieren, wie mehrere Add-Ins mit der Multifunktionsleiste interagieren können.customUI
und einen_rels
Ordner hinzu.customUI
Erstellen Sie in jedem Ordner einecustomUI.xml
Datei. DiecustomUI.xml
Datei beschreibt, wie Excel-Dateien mit dem Menüband interagieren. Teil 2 des Microsoft-Handbuchs behandelt die Elemente in dercustomUI.xml
Datei.Meine
customUI.xml
Datei fürChart Tools.xlam
sieht so ausMeine
customUI.xml
Datei fürPriveleged UDFs.xlam
sieht so aus.zip
an den Dateinamen an. In meinem Fall, ich umbenanntChart Tools.xlam
zuChart Tools.xlam.zip
, undPrivelged UDFs.xlam
zuPriveleged UDFs.xlam.zip
..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-HandbuchMeine
.rels
Datei fürChart Tools.xlam
sieht so ausMeine
.rels
Datei fürPriveleged UDFs
sieht so aus..rels
Dateien in jeder.zip
Datei durch die.rels
Datei / Dateien, die Sie im vorherigen Schritt geändert haben..customUI
Sie den von Ihnen erstellten Ordner und fügen Sie ihn in das Ausgangsverzeichnis der.zip
Datei / Dateien ein..zip
Dateierweiterung aus den von Ihnen erstellten Excel-Dateien ..xlam
Dateien erstellt haben , fügen Sie sie wieder in Excel zu Ihren Excel-Add-Ins hinzu.onAction
Schlüsselwörter in meinen Schaltflächen. DasonAction
Schlüsselwort gibt an, dass die Excel-Anwendung beim Auslösen des enthaltenen Elements die in Anführungszeichen eingeschlossene Unterroutine direkt nach demonAction
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ürChart Tools.xlam
sieht aus wieMein
CallBacks
Modul fürPriveleged UDFs.xlam
sieht aus wieOption Explizit
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
idQ
undxlmns:
. In meinem Beispiel haben dieChart Tools.xlam
undPriveleged UDFs.xlam
beide Zugriff auf die Elemente mitidQ
's gleichx:chartToolsTab
undx:privelgedUDFsTab
. Damit dies funktioniert,x:
ist das erforderlich, und ich habe seinen Namespace in der ersten Zeile meinercustomUI.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 .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 .quelle
Ein anderer Ansatz wäre das Herunterladen des kostenlosen Open XML-Klassenmoduls von Jan Karel Pieterse von dieser Seite: Bearbeiten von Elementen in einer OpenXML-Datei mit VBA
Mit diesem Zusatz zu Ihrem VBA-Projekt können Sie die Excel-Datei entpacken, das XML mit VBA ändern und dann die Klasse mit der Klasse erneut entpacken.
quelle