Um ein Ribbon an Ihre Bedürfnisse anzupassen, müssen Sie dessen interne XML-Beschreibung ändern. Wir zeigen, wie man das mithilfe eines speziellen Programms ganz einfach hinbekommt.
Im Beitrag "Ribbons erstellen in Word 2007" haben Sie gesehen, wie Sie eine neue Registerkarte mit eigenen Befehlen an das Word-Ribbon anfügen. Sie finden dort die grundsätzlichen Tipps zur Erstellung und Programmierung der Ribbons und was dabei zu beachten ist.
Manchmal darf es aber auch ein bisschen weniger sein - wenn Sie in einer vorhandenen Registerkarte lediglich einen Befehl ergänzen möchten. Erstellen Sie dazu ein leeres Word-Dokument mit Makros im *.docm- oder *.dotm-Format. Dann schließen Sie es in Word und öffnen es im Custom UI Editor.
Fügen Sie mit dem Menü Sample/Word - Group On Insert Tab den folgenden Beispiel-Code ein:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab idMso="TabInsert"> <group id="customGroup" label="Contoso" insertAfterMso="GroupIllustrations"> <button id="customButton" label="Document ID" size="large" imageMso="ListNumVal" onAction="insertDocID" /> </group> </tab> </tabs> </ribbon> </customUI>
Der Beispiel-Code für eine eingefügte Gruppe
Dabei wird dank idMso="TabInsert" das integrierte Register Einfügen mitbenutzt, deswegen erhält es auch kein neues label. Darin legt der XML-Code eine neue Gruppe namens customGroup an, welche wegen insertAfterMso="GroupIllustrations" nach der vorhandenen Gruppe Illustrationen erscheinen soll.
Contoso
Contoso ist der Name einer fiktiven Firma, die Microsoft in allen Veröffentlichungen nutzt, wenn ein Beispiel benötigt wird.
Leider ist der Beispiel-Code fehlerhaft, denn erstens heißt die Gruppe in Wirklichkeit "GroupInsertIllustrations", was Sie manuell ändern müssen. Zweitens gibt es auch die im <button>-Element benutzte imageMso="ListNumVal" nicht, hier muss es stattdessen imageMso="ListSetNumberingValue" heißen. Nach diesen Änderungen sieht der korrekte XML-Code so aus:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab idMso="TabInsert"> <group id="customGroup" label="Contoso" insertAfterMso="GroupInsertIllustrations"> <button id="customButton" label="Document ID" size="large" imageMso="ListSetNumberingValue" onAction="insertDocID" /> </group> </tab> </tabs> </ribbon> </customUI>
Nun können Sie die Datei im Custom UI Editor schließen und sehen in Word Ihre neue Gruppe in der vorhandenen Registerkarte "Einfügen":
Eine eigene Gruppe im bestehenden Register
Allerdings funktioniert der Klick auf die Schaltfläche nicht, denn das <button>-Element ruft in seinem onAction-Attribut eine Prozedur insertDocID auf, die noch nicht vorhanden ist.
Fügen Sie also in Word im VBA-Editor ein neues Modul hinzu (Einfügen/Modul) und schreiben Sie in das neue Modul diese Prozedur mit der passenden Signatur:
'callback for customButton onAction Sub insertDocID(control As IRibbonControl) MsgBox "hier Nummer einfügen..." End Sub
Die passende Prozedur für das Ribbon
Auch wenn die Prozedur lediglich eine Meldung erzeugt, ist das Ribbon damit voll funktionsfähig und enthält nun eine eigene Gruppe an der gewünschten Stelle.
Gleiche Funktionalität in allen Office 2007-Programmen
Auch wenn das Beispiel hier in Word eingebaut ist, funktioniert es grundsätzlich gleich in den anderen Office 2007-Programmen. Lediglich die Namen der integrierten Register und Gruppen können sich unterscheiden.



Makro mit Parameter aufrufen
Vielen Dank für den wertvollen Artikel. Einen wichtigen Hinweis möchte ich hier noch geben. In dem aufgerufenen Makro muss als Parameter unbedingt das RibbonControl übergeben werden.
Sub myMakro(control As IRibbonControl)
'hier steht der Code
End Sub
Sonst bekommt man beim Aufruf eine Fehlermeldung, in der man zwar darauf hingewiesen wird, dass ein Parameter fehlt, es ist aber nicht ersichtlich, welcher.
Gruß
Bodo Zimmerlinkat
steht doch drin
Das steht doch bei allen Code-Beispielen auch so drin im Text.
...hoppla, in meiner Antwort ist ein Fehler drin:
Die QAT kann nur befüllt werden, wenn das Ribbon komplett entleert wird! Es muss also für startFromScratch="true" heißen!
Das ist etwas lästig, weil Sie dann nämlich auch die Standard-Ribbons erst per XML wieder anzeigen müssen.
Lorenz Hölscher
Hallo Frau Schulz,, sondern (Quick Access Toolbar) als Gruppe:
es beginnt als XML wie im akademie-Beitrag "Dynamische Beschriftungen auf Ribbons", nennt aber dann nicht
...hier Ihre Befehle
Die Befehle und die Callback-Technik sind identisch mit denen im genannten Artikel.
Mit freundlichen Grüßen,
Lorenz Hölscher
Guten Tag, ich habe eigene Befehle/Makros/VBA in die Symbolleiste für den Schnellzugriff eingebunden. Ich möchte dort jedoch eigene Schaltflächen integrieren und nicht nur die verwenden können, die ich als Auswahl über die Maske "Schaltfläche Ändern" erhalte.
Können Sie mir weiterhelfen?
Freundliche Grüße
Gundula Schulz
Hallo Herr Hölscher,
sehr gute Schritt für Schritt Erklärung.
Von mir gibt es dafür: 100 Punkte