Eigene Befehle in Ribbons einfügen

Von: Lorenz Hölscher
Stand: 4. Mai 2011
5
(3)
Beitrag bewerten
Anmelden um Kommentare zu schreiben

Downloads zu diesem Beitrag

Über den Autor: Lorenz Hölscher

bild80517

Lorenz Hölscher ist freiberuflicher Dozent, Berater und Programmierer mit Schwerpunkt Anwendungs-Programmierung. Vorrangig widmet er sich Access, Word und Excel sowie begleitenden grafischen Arbeiten. Er legt viel Wert auf benutzerfreundliche Oberflächen und ordentliches Design in Optik und Programmierung. Zu Hilfe kommen ihm da seine langjährigen "branchenfremden" Erfahrungen als Architekt, Layouter und Designer.

Lorenz Hölscher bietet eigene Hilfeseiten an und hat bei Microsoft Press mehrere Bücher veröffentlicht zu Access 2007, Access 2007 VBA, Word 2007 VBA und Access 2010.

Beiträge des Autors als Atom-Feed Atom-Feed: Neues von akademie.de

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.


Werden Sie Probemitglied - kostenlos.

Ohne finanzielles Risiko haben Sie Zugriff auf alle Inhalte auf akademie.de, außer Downloads. Die Anmeldung dauert drei Minuten. Sie können während der ersten 14 Tage ohne Angabe von Gründen stornieren. Eine E-Mail genügt.

Weitere Informationen zu akademie.de finden Sie in unserem Infobereich und in unseren AGB.

Jetzt Probemitglied werden
Ich kann in den 14 Tagen Probezeit formlos z.B. per E-Mail stornieren. Wenn ich das nicht tue, entscheide ich mich für ein

Beitrag bewerten

Ihre Wertung:

 

Kommentar-Darstellungsoptionen

Wählen Sie hier Ihre bevorzugte Anzeigeart für Kommentare aus und klicken Sie auf „Einstellungen speichern“ um die Änderungen zu übernehmen.

Hallo Herr Hölscher,

sehr gute Schritt für Schritt Erklärung.
Von mir gibt es dafür: 100 Punkte

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

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