öffentlich
Redaktion Druckversion

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>

Bild vergrößernDer 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>

Bild vergrößernDer korrigierte XML-Code

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":

Bild vergrößernEine 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

Bild vergrößernDie 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.

Beitrag bewerten

Ihre Wertung:

 

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,
es beginnt als XML wie im akademie-Beitrag "Dynamische Beschriftungen auf Ribbons", nennt aber dann nicht , sondern (Quick Access Toolbar) als Gruppe:




...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

Mitglied werden, Vorteile nutzen!

  • Sie können alles lesen und herunterladen: Beiträge, PDF-Dateien und Zusatzdateien (Checklisten, Vorlagen, Musterbriefe, Excel-Rechner u.v.a.m.)
  • Unsere Autoren beantworten Ihre Fragen

Downloads zu diesem Beitrag

Newsletter abonnieren