Menüband: Unterschied zwischen den Versionen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „== Vorbereitungen == Um eventuelle Fehlermeldungen, welche durch eine fehlerhafte Definition des Menübandes entstehen, angezeigt zu bekommen, nehmen Sie bitt…“)
 
Keine Bearbeitungszusammenfassung
Zeile 2: Zeile 2:


Um eventuelle Fehlermeldungen, welche durch eine fehlerhafte Definition des Menübandes entstehen, angezeigt zu bekommen, nehmen Sie bitte folgende Einstellung in Ihrer Office-Anwendung vor:
Um eventuelle Fehlermeldungen, welche durch eine fehlerhafte Definition des Menübandes entstehen, angezeigt zu bekommen, nehmen Sie bitte folgende Einstellung in Ihrer Office-Anwendung vor:
* ''Datei'', ''Optionen'', ''Erweitert'', ''Allgemein'', ''Fehler des Benutzerflächen-Add-Ins anzeigen'' aktivieren
* ''Datei'', ''Optionen'', ''Erweitert'', ''Allgemein'', ''Fehler des Benutzerflächen-Add-Ins anzeigen'' aktivieren


== Wichtigste Grundlagen ==
== Wichtigste Grundlagen ==
Zeile 10: Zeile 12:
=== OOXML ===
=== OOXML ===


Seit Office 2007 wird das Office Open XML Dateiformat eingesetzt. Die Beschreibung, Inhalte, Bilder und Eigenschaften einer Office-Datei werden hierbei in XML- (bzw. Bild-) Dateien gespeichert und anschließend im ZIP-Format komprimiert. Wenn Sie sich diese Struktur ansehen möchten, können Sie einer beliebige Office-Datei (dotm, pptx, xlsm, ...) ein '.zip' anhängen und dann die Datei als ZIP-Datei öffnen: [[Datei:Ribbon_03.png]] Die geöffnete Datei sieht in etwa so aus (Beispiel Word Dokument): [[Datei:Ribbon_15.png]] Auf oberster Ebene erscheint immer die Datei '[Content_Types].xml', alle weiteren Inhalte sind auf diverse Verzeichnisse aufgeteilt. '''Bitte beachten:''' Die Beziehungen und Zusammenhänge innerhalb der Struktur einer OOXML-Datei folgen sehr strikten Vorgaben und müssen bei Änderungen sehr genau eingehalten werden, sonst kann der Inhalt der OOXML-Datei eventuell nicht mehr von der dazugehörigen Office-Anwendung interpretiert (geöffnet) werden kann.
Seit Office 2007 wird das Office Open XML Dateiformat eingesetzt. Die Beschreibung, Inhalte, Bilder und Eigenschaften einer Office-Datei werden hierbei in XML- (bzw. Bild-) Dateien gespeichert und anschließend im ZIP-Format komprimiert. Wenn Sie sich diese Struktur ansehen möchten, können Sie einer beliebige Office-Datei (dotm, pptx, xlsm, ...) ein '.zip' anhängen und dann die Datei als ZIP-Datei öffnen:
 
[[Datei:Ribbon_03.png]]
 
Die geöffnete Datei sieht in etwa so aus (Beispiel Word Dokument):
 
[[Datei:Ribbon_15.png]]
 
Auf oberster Ebene erscheint immer die Datei '[Content_Types].xml', alle weiteren Inhalte sind auf diverse Verzeichnisse aufgeteilt.
 
'''Bitte beachten:''' Die Beziehungen und Zusammenhänge innerhalb der Struktur einer OOXML-Datei folgen sehr strikten Vorgaben und müssen bei Änderungen sehr genau eingehalten werden, sonst kann der Inhalt der OOXML-Datei eventuell nicht mehr von der dazugehörigen Office-Anwendung interpretiert (geöffnet) werden kann.


=== XML ===
=== XML ===


=== Wie funktioniert das Menüband? ===
=== Wie funktioniert das Menüband? ===


Das Office Menüband, welches seit Office 2007 verwendet wird, bietet seine Funktionen über Reiter, Gruppen und Knöpfe (Untermenüs, Eingabefelder etc.) an. Diese Struktur ist zwingend vorgegeben -- ein Element, welches auf Benutzereingaben reagiert (wie ein Knopf, ein Eingabefeld etc.) muss sich in einer Gruppe befinden, und jede Gruppe muss in einem Reiter abgelegt sein. Dabei können Sie auf jeder Ebene ein eingebautes Element der Menüleiste verwenden. Wenn Sie zum Beispiel einen Knopf in einer eigenen Gruppe im Start-Reiter unterbringen möchten, adressieren Sie den Reiter mit <tab idMso="TabHome"> wobei die nötigen Einstellungen mit den Suchbegriffen 'Liste der idMso' gefunden werden können. Ein eigener Reiter würde hingegen mit einer eigenen 'id' bezeichnet: <tab id="tabWorkbookAssistant"> '''Bitte beachten:''' Wenn Sie mehrere Dateien öffnen, welche Anpassungen des Menübandes enthalten und die gleiche 'id' verwendet haben, werden die Elemente mehrfach in der Benutzeroberfläche erscheinen!
Das Office Menüband, welches seit Office 2007 verwendet wird, bietet seine Funktionen über Reiter, Gruppen und Knöpfe (Untermenüs, Eingabefelder etc.) an. Diese Struktur ist zwingend vorgegeben -- ein Element, welches auf Benutzereingaben reagiert (wie ein Knopf, ein Eingabefeld etc.) muss sich in einer Gruppe befinden, und jede Gruppe muss in einem Reiter abgelegt sein.
 
Dabei können Sie auf jeder Ebene ein eingebautes Element der Menüleiste verwenden. Wenn Sie zum Beispiel einen Knopf in einer eigenen Gruppe im Start-Reiter unterbringen möchten, adressieren Sie den Reiter mit  
 
<tab idMso="TabHome">
 
wobei die nötigen Einstellungen mit den Suchbegriffen 'Liste der idMso' gefunden werden können.
 
Ein eigener Reiter würde hingegen mit einer eigenen 'id' bezeichnet:
 
<tab id="tabWorkbookAssistant">
 
'''Bitte beachten:''' Wenn Sie mehrere Dateien öffnen, welche Anpassungen des Menübandes enthalten und die gleiche 'id' verwendet haben, werden die Elemente mehrfach in der Benutzeroberfläche erscheinen!


==== customUI.xml ====
==== customUI.xml ====


Eigene Erweiterungen des Menübandes werden in der in Office 2007 eingeführten XML-Struktur untergebracht. Das neue Dateiformat besteht aus gezippten XML-Dateien, welche die verschiedenen Aspekte der Datei abbilden, wie Eigenschaften, Einstellungen, und Inhalt der Datei. Wenn Sie einer beliebige Office-Datei (docx, xlsm, pptx, ...) ein '.zip' anhängen und diese dann öffnen, sehen Sie genau diese XML-Struktur. Bitte beachten Sie jedoch, dass Änderungen an den XML-Dateien immer potenziell auch dazu führen können, dass die Datei danach nicht mehr von der Anwendung geöffnet werden kann. Daher sollten Sie vor Änderungen sicherheitshalber immer eine Kopie des Originals anfertigen. Die Anpassung des Menübandes wird entsprechend in einer eigenen XML-Datei definiert, welches in der oben beschriebenen Struktur untergebracht wird. Die hauptsächlich dafür benötigte Datei heißt 'customUI.xml' -- wie Sie diese anlegen und bearbeiten, erfahren Sie weiter unten.
Eigene Erweiterungen des Menübandes werden in der in Office 2007 eingeführten XML-Struktur untergebracht. Das neue Dateiformat besteht aus gezippten XML-Dateien, welche die verschiedenen Aspekte der Datei abbilden, wie Eigenschaften, Einstellungen, und Inhalt der Datei. Wenn Sie einer beliebige Office-Datei (docx, xlsm, pptx, ...) ein '.zip' anhängen und diese dann öffnen, sehen Sie genau diese XML-Struktur.
 
Bitte beachten Sie jedoch, dass Änderungen an den XML-Dateien immer potenziell auch dazu führen können, dass die Datei danach nicht mehr von der Anwendung geöffnet werden kann. Daher sollten Sie vor Änderungen sicherheitshalber immer eine Kopie des Originals anfertigen.
 
Die Anpassung des Menübandes wird entsprechend in einer eigenen XML-Datei definiert, welches in der oben beschriebenen Struktur untergebracht wird. Die hauptsächlich dafür benötigte Datei heißt 'customUI.xml' -- wie Sie diese anlegen und bearbeiten, erfahren Sie weiter unten.


==== Wichtige Eigenschaften ====
==== Wichtige Eigenschaften ====
Zeile 28: Zeile 58:
* Die 'id' ist der intern verwendete Name des Elementes und muss ausdrücklich bei den meisten Elementen angegeben werden
* Die 'id' ist der intern verwendete Name des Elementes und muss ausdrücklich bei den meisten Elementen angegeben werden
** Ausnahmen: <customUI>, <ribbon>, <backstage>, <tabs>
** Ausnahmen: <customUI>, <ribbon>, <backstage>, <tabs>
* Wenn Sie ein eingebautes Element verwenden möchten, geben Sie statt der 'id' die gewünschte 'idMso' an <button idMso="FilePrintQuick"/>
* Wenn Sie ein eingebautes Element verwenden möchten, geben Sie statt der 'id' die gewünschte 'idMso' an
<button idMso="FilePrintQuick"/>
* '''Wichtig:''' Bitte verwenden Sie in der 'id'-Eigenschaft ausschließlich Buchstaben, Ziffern und Unterstriche!
* '''Wichtig:''' Bitte verwenden Sie in der 'id'-Eigenschaft ausschließlich Buchstaben, Ziffern und Unterstriche!


Zeile 46: Zeile 77:
==== Dynamische Eigenschaften ====
==== Dynamische Eigenschaften ====


Generell werden die Eigenschaften von Elementen des Menübandes statisch angegeben, wie zum Beispiel die 'id', welche niemals nachträglich geändert werden kann. Andere Eigenschaften können beim Einlesen des Menübandes per Programmierung vorgegeben werden und bleiben danach statisch, wie zum Beispiel die sprachabhängige Beschriftung von Elementen. Eine letzte Gruppe von Eigenschaften kann situationsabhängig immer wieder neue Werte annehmen, wie zum Beispiel die Verfügbarkeit einer Funktion abhängig von der aktuellen Auswahl. Dynamische Eigenschaften tragen in ihren Namen ein 'get'. Der Wert ist dann der Name der [[#Callbacks|Callback-Prozedur]]:
Generell werden die Eigenschaften von Elementen des Menübandes statisch angegeben, wie zum Beispiel die 'id', welche niemals nachträglich geändert werden kann. Andere Eigenschaften können beim Einlesen des Menübandes per Programmierung vorgegeben werden und bleiben danach statisch, wie zum Beispiel die sprachabhängige Beschriftung von Elementen. Eine letzte Gruppe von Eigenschaften kann situationsabhängig immer wieder neue Werte annehmen, wie zum Beispiel die Verfügbarkeit einer Funktion abhängig von der aktuellen Auswahl.
{| class="wikitable"
 
Dynamische Eigenschaften tragen in ihren Namen ein 'get'. Der Wert ist dann der Name der [[#Callbacks|Callback-Prozedur]]:
 
{| class="wikitable"  
! style="text-align:left;" | Statische Eigenschaft
! style="text-align:left;" | Statische Eigenschaft
! style="text-align:left;" | Dynamische Eigenschaft
! style="text-align:left;" | Dynamische Eigenschaft
Zeile 55: Zeile 89:
| label
| label
| getLabel
| getLabel
| <button id="buttonTest" getLabel="buttonTest_getLabel"/>
|
| Sub buttonTest_getLabel(control As IRibbonControl, ByRef label) label = "Beschriftung" End Sub
<button id="buttonTest" getLabel="buttonTest_getLabel"/>
|  
Sub buttonTest_getLabel(control As IRibbonControl, ByRef label)  
    label = "Beschriftung"
End Sub
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| image
| image
| getImage
| getImage
| <button id="buttonTest" getImage="buttonTest_getImage"/>
|
| Sub buttonTest_getImage(control As IRibbonControl, ByRef image) image = "EigenesIcon" End Sub
<button id="buttonTest" getImage="buttonTest_getImage"/>
|  
Sub buttonTest_getImage(control As IRibbonControl, ByRef image)  
    image = "EigenesIcon"
End Sub
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| enabled
| enabled
| getEnabled
| getEnabled
| <button id="buttonTest" getEnabled="buttonTest_getEnabled"/>
|
| Sub buttonTest_getEnabled(control As IRibbonControl, ByRef enabled) If Bedingungerfüllt Then enabled = True End If End Sub
<button id="buttonTest" getEnabled="buttonTest_getEnabled"/>
|  
Sub buttonTest_getEnabled(control As IRibbonControl, ByRef enabled)  
    If Bedingungerfüllt Then
        enabled = True
    End If
End Sub
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| visible
| visible
| getVisible
| getVisible
| <button id="buttonTest" getVisible="buttonTest_getVisible"/>
|
| Sub buttonTest_getVisible(control As IRibbonControl, ByRef visible) If Bedingungerfüllt Then visible = True End If End Sub  
<button id="buttonTest" getVisible="buttonTest_getVisible"/>
|  
Sub buttonTest_getVisible(control As IRibbonControl, ByRef visible)  
    If Bedingungerfüllt Then
        visible = True
    End If
End Sub
|} usw. (bitte beachten Sie, dass nicht jede Eigenschaft eine dynamische Entsprechung hat!)
|} usw. (bitte beachten Sie, dass nicht jede Eigenschaft eine dynamische Entsprechung hat!)


==== Callbacks ====
==== Callbacks ====


Sogenannte Callback-Prozeduren stellen die Schnittstelle zwischen den in der XML-Struktur definierten Anpassungen des Menübandes und der Programmierung dar. Callbacks werden typischerweise in 'onAction' und dynamischen Eigenschaften verwendet. Beispiel 'customUI.xml': <button id="buttonPressMe" label="Press Me" getEnabled="butonPressMe_getEnabled" onAction="buttonPressMe_onAction"/> Dazu passende Callback-Prozeduren: Public Sub butonPressMe_getEnabled(ByVal Control As IRibbonControl, ByRef enabled) ' enabled = SollKnopfAktivSein() End Sub Public Sub buttonPressMe_onAction(ByVal Control As IRibbonControl) ' DiesSollAufKnopfdruckGeschehen End Sub
Sogenannte Callback-Prozeduren stellen die Schnittstelle zwischen den in der XML-Struktur definierten Anpassungen des Menübandes und der Programmierung dar. Callbacks werden typischerweise in 'onAction' und dynamischen Eigenschaften verwendet.
* Beachten Sie, dass eine Callback-Prozedur bestimmte Übergabeparameter liefert und diese auch erwartet.
 
* Rückgabewerte werden 'ByRef' übergeben.
Beispiel 'customUI.xml':
* Der Parameter 'Control' enthält unter anderem die 'id' des aufrufenden Elementes und kann somit diesem zugeordnet werden. So können Sie zum Beispiel alle 'getLabel'-Callbacks in einer Prozedur sammeln und anhand der Control.ID feststellen, welcher Text welchem Element zugeordnet werden soll: '''Beispiel einer Sammel-Callback-Lösung''' Im Beispiel wird zusätzlich zum Namen der Callback-Prozedur dessen Modul angegeben, durch einen Punkt getrennt. <tab id="tabWorkbookAssistant" '''getLabel'''="RibbonLocalization.LocalizeLabel" insertBeforeMso="TabHome" getVisible="RibbonCommands.ControlIsVisible"> <group id="groupColorTools" '''getLabel'''="RibbonLocalization.LocalizeLabel" getVisible="RibbonCommands.ControlIsVisible"> <button id="buttonColorDialog" '''getLabel'''="RibbonLocalization.LocalizeLabel" onAction="RibbonCommands.ShowColorDialog" getEnabled="RibbonCommands.CanColorElement" /> ... Im Modul 'RibbonLocalization' befindet sich folgende Callback-Prozedur: Public Sub LocalizeLabel(control As IRibbonControl, ByRef Label) Label = FindTranslation(control.ID) End Sub Die 'control.ID' wird dazu verwendet, die passende Beschriftung für das jeweilige Element zu finden.
 
<button id="buttonPressMe"
    label="Press Me"  
    getEnabled="butonPressMe_getEnabled"
    onAction="buttonPressMe_onAction"/>
 
 
Dazu passende Callback-Prozeduren:
 
Public Sub butonPressMe_getEnabled(ByVal Control As IRibbonControl, ByRef enabled)
   
    ' enabled = SollKnopfAktivSein()
End Sub
 
Public Sub buttonPressMe_onAction(ByVal Control As IRibbonControl)
   
    ' DiesSollAufKnopfdruckGeschehen
End Sub
 
* Beachten Sie, dass eine Callback-Prozedur bestimmte Übergabeparameter liefert und diese auch erwartet.  
* Rückgabewerte werden 'ByRef' übergeben.  
* Der Parameter 'Control' enthält unter anderem die 'id' des aufrufenden Elementes und kann somit diesem zugeordnet werden. So können Sie zum Beispiel alle 'getLabel'-Callbacks in einer Prozedur sammeln und anhand der Control.ID feststellen, welcher Text welchem Element zugeordnet werden soll:
 
'''Beispiel einer Sammel-Callback-Lösung'''
 
Im Beispiel wird zusätzlich zum Namen der Callback-Prozedur dessen Modul angegeben, durch einen Punkt getrennt.
 
<tab id="tabWorkbookAssistant"  
    '''getLabel'''="RibbonLocalization.LocalizeLabel"
    insertBeforeMso="TabHome"
    getVisible="RibbonCommands.ControlIsVisible">
    <group id="groupColorTools"  
        '''getLabel'''="RibbonLocalization.LocalizeLabel"  
        getVisible="RibbonCommands.ControlIsVisible">
        <button id="buttonColorDialog"
            '''getLabel'''="RibbonLocalization.LocalizeLabel"
            onAction="RibbonCommands.ShowColorDialog"
            getEnabled="RibbonCommands.CanColorElement" />
           
            ...
 
Im Modul 'RibbonLocalization' befindet sich folgende Callback-Prozedur:
 
Public Sub LocalizeLabel(control As IRibbonControl, ByRef Label)
   
    Label = FindTranslation(control.ID)
End Sub
 
Die 'control.ID' wird dazu verwendet, die passende Beschriftung für das jeweilige Element zu finden.


=== Anpassbare Bereiche ===
=== Anpassbare Bereiche ===
Zeile 87: Zeile 193:
==== Menüband (ribbon) ====
==== Menüband (ribbon) ====


Das Menüband ist der prominenteste Bereich der Benutzeroberfläche von Office seit Version 2007. Es enthält die Reiter (tabs, tab), welche wiederum einzelne Gruppen (group)enthalten können, in welchen dann die ausführbaren Elemente der Benutzeroberfläche untergebracht werden, wie Knöpfe und Menüs. Zusätzlich enthält dieser Bereich auch die Schnellzugriffleiste (qat), welche oben links in der Titelleiste angezeigt wird.
Das Menüband ist der prominenteste Bereich der Benutzeroberfläche von Office seit Version 2007. Es enthält die Reiter (tabs, tab), welche wiederum einzelne Gruppen (group)enthalten können, in welchen dann die ausführbaren Elemente der Benutzeroberfläche untergebracht werden, wie Knöpfe und Menüs.
 
Zusätzlich enthält dieser Bereich auch die Schnellzugriffleiste (qat), welche oben links in der Titelleiste angezeigt wird.


==== Ab Office 2010: Backstage (backstage) ====
==== Ab Office 2010: Backstage (backstage) ====


Die Backstage ist der Aufgabenbereich, welcher sich unter dem Reiter 'Datei' öffnet. Standardmäßig enthält er die eigenen Reiter 'Informationen', 'Neu', 'Öffnen', 'Drucken' etc. Dieser Aufgabenbereich kann sehr stark beeinflusst werden -- Sie können Elemente ausblenden, hinzufügen und bestehenden Elementen neue Aufgaben erteilen. '''Bitte beachten:''' Die Anpassung des Backstages ist erst mit Office 2010 möglich -- sie kann daher nur in einer customUI.xml eingesetzt werden, welche wie folgt eingerichtet ist: <customUI xmlns="http://schemas.microsoft.com/office/'''2009/07'''/customui"> <backstage> </backstage> </customUI> Sie müssten entsprechend auch in der .rels-Datei den passenden Eintrag vornehmen.
Die Backstage ist der Aufgabenbereich, welcher sich unter dem Reiter 'Datei' öffnet. Standardmäßig enthält er die eigenen Reiter 'Informationen', 'Neu', 'Öffnen', 'Drucken' etc.
 
Dieser Aufgabenbereich kann sehr stark beeinflusst werden -- Sie können Elemente ausblenden, hinzufügen und bestehenden Elementen neue Aufgaben erteilen.
 
'''Bitte beachten:''' Die Anpassung des Backstages ist erst mit Office 2010 möglich -- sie kann daher nur in einer customUI.xml eingesetzt werden, welche wie folgt eingerichtet ist:
 
<customUI xmlns="http://schemas.microsoft.com/office/'''2009/07'''/customui">
  <backstage>
  </backstage>
</customUI>
 
Sie müssten entsprechend auch in der .rels-Datei den passenden Eintrag vornehmen.


=== Bitte beachten ===
=== Bitte beachten ===
Zeile 100: Zeile 219:
=== Zusätzliche Quellen ===
=== Zusätzliche Quellen ===


Eine vollständige und umfassende Beschreibung des Menübandes sowie aller Controls und Eigenschaften finden Sie hier: [http://www.accessribbon.de/ www.accessribbon.de] Diese Seite wurde für Access-Entwickler geschrieben, alle Beispiele sowie sämtliche Angaben betreffen bis auf wenige Ausnahmen alle Office-Anwendungen mit Menüband, also auch Excel, PowerPoint und Word.
Eine vollständige und umfassende Beschreibung des Menübandes sowie aller Controls und Eigenschaften finden Sie hier: [http://www.accessribbon.de/ www.accessribbon.de]
 
Diese Seite wurde für Access-Entwickler geschrieben, alle Beispiele sowie sämtliche Angaben betreffen bis auf wenige Ausnahmen alle Office-Anwendungen mit Menüband, also auch Excel, PowerPoint und Word.


== Werkzeuge ==
== Werkzeuge ==
Zeile 106: Zeile 227:
=== CustomUIEditor ===
=== CustomUIEditor ===


Ursprünglich wurde von Microsoft ein Editor speziell zur Bearbeitung des Menübandes zur Verfügung gestellt: [[Datei:CustomUIEditor.png]] Dieser scheint nicht mit allen Windows-Versionen kompatibel zu sein und wurde seit 2009 (für die Erweiterungen, welche Office 2010 anbietet) nicht weiter entwickelt. Auf Windows 8.1 ist die letzte Version jedoch lauffähig. '''Vorteile'''
Ursprünglich wurde von Microsoft ein Editor speziell zur Bearbeitung des Menübandes zur Verfügung gestellt:
 
[[Datei:CustomUIEditor.png]]
 
Dieser scheint nicht mit allen Windows-Versionen kompatibel zu sein und wurde seit 2009 (für die Erweiterungen, welche Office 2010 anbietet) nicht weiter entwickelt. Auf Windows 8.1 ist die letzte Version jedoch lauffähig.
 
'''Vorteile'''
* Schnelle und direkte Möglichkeit, Menüband anzupassen
* Schnelle und direkte Möglichkeit, Menüband anzupassen
* Enthält einige Beispiele für den Einstieg
* Enthält einige Beispiele für den Einstieg
* Enthält rudimentäre Prüfung des XML-Codes
* Enthält rudimentäre Prüfung des XML-Codes
* Übernimmt automatisch Einträge in rels-Dateien
* Übernimmt automatisch Einträge in rels-Dateien
* Ermöglicht das direkte Einbinden eigener Icons '''Nachteile'''
* Ermöglicht das direkte Einbinden eigener Icons
 
'''Nachteile'''
* Die Beispiele müssen teilweise angepasst werden, weil sie nur für 2010 geschrieben sind (Office/2009/07 muss heißen Office/2006/01)
* Die Beispiele müssen teilweise angepasst werden, weil sie nur für 2010 geschrieben sind (Office/2009/07 muss heißen Office/2006/01)
* Editor unkomfortabel
* Editor unkomfortabel
* Größere Anpassungen führen zu unwillkürlichem Springen im Editor
* Größere Anpassungen führen zu unwillkürlichem Springen im Editor
* XML muss (von Beispielen abgesehen) selbst formuliert werden (mögliche Elemente und Eigenschaften werden nicht angeboten) '''Download und Quelle'''<br> Download der aktuellen Version: [[Datei:OfficeCustomUIEditorSetup.zip]]<br> Ursprüngliche Quelle: [http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2006/05/26/customuieditor.aspx openxmldeveloper.org]
* XML muss (von Beispielen abgesehen) selbst formuliert werden (mögliche Elemente und Eigenschaften werden nicht angeboten)
 
'''Download und Quelle'''<br>
Download der aktuellen Version: [[Datei:OfficeCustomUIEditorSetup.zip]]<br>
Ursprüngliche Quelle: [http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2006/05/26/customuieditor.aspx openxmldeveloper.org]


== Aufbau und Bearbeitung ohne Hilfsmittel ==
== Aufbau und Bearbeitung ohne Hilfsmittel ==
Zeile 124: Zeile 257:


Folgende Schritte führen zu einem neu erstellten Menüband. Wenn Sie an einem schon vorhandenen, selbst gebauten Menüband Änderungen vornehmen möchten, sehen Sie bitte weiter unten den Abschnitt [[#Menüband nachbearbeiten|Menüband nachbearbeiten]].
Folgende Schritte führen zu einem neu erstellten Menüband. Wenn Sie an einem schon vorhandenen, selbst gebauten Menüband Änderungen vornehmen möchten, sehen Sie bitte weiter unten den Abschnitt [[#Menüband nachbearbeiten|Menüband nachbearbeiten]].
{| class="wikitable"
 
{| class="wikitable"  
! style="text-align:left;" | Arbeitsschritt
! style="text-align:left;" | Arbeitsschritt
! style="text-align:left;" | Beschreibung
! style="text-align:left;" | Beschreibung
Zeile 134: Zeile 268:
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Datei als .*m speichern und schließen
| Datei als .*m speichern und schließen
| Speichern Sie die Datei in einem der .*m-Formate ab: docm, dotm (Word), xlsm, xlam (Excel) oder pptm, ppam (PowerPoint). Anschließend schließen Sie bitte die Datei.
| Speichern Sie die Datei in einem der .*m-Formate ab: docm, dotm (Word), xlsm, xlam (Excel) oder pptm, ppam (PowerPoint).
 
Anschließend schließen Sie bitte die Datei.
| [[Datei:Ribbon_02.png]]
| [[Datei:Ribbon_02.png]]
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Datei in *.zip umbenennen
| Datei in *.zip umbenennen
| | [[Datei:Ribbon_03.png]]
|  
| [[Datei:Ribbon_03.png]]
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Datei in *.zip umbenennen
| Datei in *.zip umbenennen
Zeile 145: Zeile 282:
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| ZIP-Datei in ein Verzeichnis entpacken
| ZIP-Datei in ein Verzeichnis entpacken
| Entpacken Sie die in der ZIP-Datei enthaltenen Dateien in ein Verzeichnis.
| Entpacken Sie die in der ZIP-Datei enthaltenen Dateien in ein Verzeichnis.  
| [[Datei:Ribbon_13.png]]
| [[Datei:Ribbon_13.png]]
|- style="vertical-align:top;"
|- style="vertical-align:top;"
Zeile 153: Zeile 290:
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Verzeichnis öffnen
| Verzeichnis öffnen
| Öffnen Sie anschließend das neue Verzeichnis (nicht die ZIP-Datei!) Die Datei- und Verzeichnisstruktur sollte ähnlich wie hier abgebildet erscheinen. Dieses Beispiel zeigt eine Word-Vorlage, bei Excel bzw. PowerPoint erscheint statt dem Unterverzeichnis 'Word' ein entsprechend anderes Unterverzeichnis.
| Öffnen Sie anschließend das neue Verzeichnis (nicht die ZIP-Datei!)
 
Die Datei- und Verzeichnisstruktur sollte ähnlich wie hier abgebildet erscheinen. Dieses Beispiel zeigt eine Word-Vorlage, bei Excel bzw. PowerPoint erscheint statt dem Unterverzeichnis 'Word' ein entsprechend anderes Unterverzeichnis.
| [[Datei:Ribbon_15.png]]
| [[Datei:Ribbon_15.png]]
|- style="vertical-align:top;"
|- style="vertical-align:top;"
Zeile 161: Zeile 300:
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| customUI.xml öffnen
| customUI.xml öffnen
| Öffnen Sie in einem XML-Editor Ihrer Wahl die neue Datei 'customUI.xml'. Sie wird ursprünglich leer sein. |
| Öffnen Sie in einem XML-Editor Ihrer Wahl die neue Datei 'customUI.xml'. Sie wird ursprünglich leer sein.
|  
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| customUI.xml Grundstruktur einfügen
| customUI.xml Grundstruktur einfügen
| Fügen Sie den nebenstehenden Text in Ihre customUI.xml-Datei ein. Diese beispielhafte Grundstruktur enthält einen neuen Reiter, eine Gruppe und einen Knopf, der die im ersten Arbeitsschritt gezeigte Prozedur aufrufen soll. '''Achtung:''' Nach dem Einfügen des Beispielcodes anhand des Screenshots auf Vollständigkeit prüfen und sicherstellen, dass in keinen Namen oder Eigenschaften Leerzeichen oder Zeilenumbrüche erscheinen!!! '''Bitte beachten:''' Keine Umlaute oder sonstige Sonderzeichen verwenden (auch nicht in Labels, Screentips usw.), wenn Sie die Dateien mit dem Notepad (Editor) bearbeiten!!! '''Bitte zusätzlich beachten:''' Manchmal suchen sich XML-Editoren unpassende Kodierungs-Einstellungen -- stellen Sie sicher, dass bei 'Encoding', 'Character Set' oder ähnlichen Einstellungen die Option 'UTF-8' verwendet wird!
| Fügen Sie den nebenstehenden Text in Ihre customUI.xml-Datei ein.
| '''Vorschau:'''<br> [[Datei:Ribbon_05.png]] '''Kopiervorlage:'''<br> <?xml version="1.0" encoding="utf-8"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="tabCustom" label="My Custom Tab"> <group id="groupCustom" label="My Custom Group"> <button id="buttonPressMe" label="Press Me" onAction="buttonPressMe_onAction"/> </group> </tab> </tabs> </ribbon> </customUI>
 
Diese beispielhafte Grundstruktur enthält einen neuen Reiter, eine Gruppe und einen Knopf, der die im ersten Arbeitsschritt gezeigte Prozedur aufrufen soll.
 
'''Achtung:''' Nach dem Einfügen des Beispielcodes anhand des Screenshots auf Vollständigkeit prüfen und sicherstellen, dass in keinen Namen oder Eigenschaften Leerzeichen oder Zeilenumbrüche erscheinen!!!
 
'''Bitte beachten:''' Keine Umlaute oder sonstige Sonderzeichen verwenden (auch nicht in Labels, Screentips usw.), wenn Sie die Dateien mit dem Notepad (Editor) bearbeiten!!!
 
'''Bitte zusätzlich beachten:''' Manchmal suchen sich XML-Editoren unpassende Kodierungs-Einstellungen -- stellen Sie sicher, dass bei 'Encoding', 'Character Set' oder ähnlichen Einstellungen die Option 'UTF-8' verwendet wird!
| '''Vorschau:'''<br>
[[Datei:Ribbon_05.png]]
 
 
'''Kopiervorlage:'''<br>
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon startFromScratch="false">
    <tabs>
      <tab id="tabCustom"
        label="My Custom Tab">
        <group id="groupCustom"
          label="My Custom Group">
          <button id="buttonPressMe"
            label="Press Me"
            onAction="buttonPressMe_onAction"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| customUI.xml speichern
| customUI.xml speichern
| Speichern Sie die Änderungen in der Datei 'customUI.xml |
| Speichern Sie die Änderungen in der Datei 'customUI.xml
|  
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| _rels\.rels öffnen
| _rels\.rels öffnen
| Die Datei '.rels' im Verzeichnis '_rels' im Notepad oder einem XML-Editor öffnen. '''Achtung:''' Diese Datei niemals umbenennen, um sie in einem XML-Editor zu öffnen!!! Windows wird Ihnen u.&nbsp;U. später die Rückbenennung von '.rels.xml' in '.rels' verweigern!!!
| Die Datei '.rels' im Verzeichnis '_rels' im Notepad oder einem XML-Editor öffnen.
 
'''Achtung:''' Diese Datei niemals umbenennen, um sie in einem XML-Editor zu öffnen!!! Windows wird Ihnen u.&nbsp;U. später die Rückbenennung von '.rels.xml' in '.rels' verweigern!!!
| [[Datei:Ribbon_06.png]]
| [[Datei:Ribbon_06.png]]
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| _rels\.rels erweitern
| _rels\.rels erweitern
| Die neue customUI muss in der '.rels' Datei als neue Relationship (Beziehung) eingetragen werden. Kopieren Sie dazu den nebenstehenden Text in die Datei. '''Wichtig:''' Achten Sie darauf, dass die neue 'Relationship' wie in der Vorschau gezeigt zwischen den 'Relationships'-Tags platziert ist. Um Ihnen eine bessere Übersicht über die Datei zu verschaffen, können Sie zwischen jedes '><' (Größer als / Kleiner als) einen Zeilenumbruch einfügen. Passen Sie die Eigenschaft 'Id' entsprechend der schon vorhandenen Ids an: Wenn die hier verwendete Id 'rId4' schon existiert, verwenden Sie den nächst höhere, noch nicht verwendeten Index. '''Bitte beachten:''' Vor 'Type' und vor 'Target' '''muss''' ein Leerzeichen stehen!
| Die neue customUI muss in der '.rels' Datei als neue Relationship (Beziehung) eingetragen werden. Kopieren Sie dazu den nebenstehenden Text in die Datei.  
| '''Vorschau:'''<br> [[Datei:Ribbon_07.png|700px]] '''Kopiervorlage:'''<br> <Relationship Id="rId4" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>
 
'''Wichtig:''' Achten Sie darauf, dass die neue 'Relationship' wie in der Vorschau gezeigt zwischen den 'Relationships'-Tags platziert ist.
 
Um Ihnen eine bessere Übersicht über die Datei zu verschaffen, können Sie zwischen jedes '><' (Größer als / Kleiner als) einen Zeilenumbruch einfügen.
 
Passen Sie die Eigenschaft 'Id' entsprechend der schon vorhandenen Ids an: Wenn die hier verwendete Id 'rId4' schon existiert, verwenden Sie den nächst höhere, noch nicht verwendeten Index.
 
'''Bitte beachten:''' Vor 'Type' und vor 'Target' '''muss''' ein Leerzeichen stehen!
| '''Vorschau:'''<br>
[[Datei:Ribbon_07.png|700px]]
 
'''Kopiervorlage:'''<br>
<Relationship  
    Id="rId4"  
    Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility"  
    Target="customUI/customUI.xml"/>
 
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Verzeichnis zippen
| Verzeichnis zippen
Zeile 183: Zeile 370:
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| ZIP umbenennen
| ZIP umbenennen
| Benennen Sie die neu gezippte Datei mit der Original-Dateiendung um und verschieben Sie die Datei an ihren Originalplatz. Wenn Sie darauf hingewiesen werden, dass die Datei durch die neue Endung eventuell unbrauchbar wird, fahren Sie trotzdem mit 'Ja' fort.
| Benennen Sie die neu gezippte Datei mit der Original-Dateiendung um und verschieben Sie die Datei an ihren Originalplatz.
| [[Datei:Ribbon_09.png]] [[Datei:Datei_umbenennen.png]]
 
Wenn Sie darauf hingewiesen werden, dass die Datei durch die neue Endung eventuell unbrauchbar wird, fahren Sie trotzdem mit 'Ja' fort.
| [[Datei:Ribbon_09.png]]
 
[[Datei:Datei_umbenennen.png]]
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Datei öffnen
| Datei öffnen
| Öffnen Sie die Datei aus dem Datei-Explorer heraus bzw. starten Sie die Anwendung, um das Add-In zu laden. Wenn eine Fehlermeldung erscheint, bestätigen Sie mit 'Ja', dass Sie fortfahren möchten. |
| Öffnen Sie die Datei aus dem Datei-Explorer heraus bzw. starten Sie die Anwendung, um das Add-In zu laden. Wenn eine Fehlermeldung erscheint, bestätigen Sie mit 'Ja', dass Sie fortfahren möchten.
|  
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Erster Test
| Erster Test
Zeile 194: Zeile 386:
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| onAction-Prozedur (Callback)
| onAction-Prozedur (Callback)
| Wenn der Knopf ‚buttonPressMe‘ gedrückt wird, erwartet dieser, eine öffentliche Prozedur mit dem in der Eigenschaft 'onAction' angegebenen Namen vorzufinden. '''Wichtig:''' Diese Callback-Prozedur erhält ein Control als Übergabeparameter. Dieser muss korrekt angegeben werden, sonst kann kein Aufruf an die Callback-Prozedur erfolgen! '''Bitte beachten:''' Denken Sie daran, dass Sie statt 'MessageboxSuccess' die Prozedur eintragen, welche Sie beim Drücken des Knopfes aufrufen möchten! '''Zur Information:''' In Excel kann das Callback auch als 'Private Sub' angelegt werden, in PowerPoint muss es 'Public' sein.
| Wenn der Knopf 'buttonPressMe' gedrückt wird, erwartet dieser, eine öffentliche Prozedur mit dem in der Eigenschaft 'onAction' angegebenen Namen vorzufinden.
| [[Datei:Ribbon_11.png|700px]] '''Kopiervorlage:''' Public Sub buttonPressMe_onAction(ByVal Control As IRibbonControl) MessageboxSuccess End Sub  
 
'''Wichtig:''' Diese Callback-Prozedur erhält ein Control als Übergabeparameter. Dieser muss korrekt angegeben werden, sonst kann kein Aufruf an die Callback-Prozedur erfolgen!
 
'''Bitte beachten:''' Denken Sie daran, dass Sie statt 'MessageboxSuccess' die Prozedur eintragen, welche Sie beim Drücken des Knopfes aufrufen möchten!
 
'''Zur Information:''' In Excel kann das Callback auch als 'Private Sub' angelegt werden, in PowerPoint muss es 'Public' sein.
| [[Datei:Ribbon_11.png|700px]]
 
'''Kopiervorlage:'''
 
Public Sub buttonPressMe_onAction(ByVal Control As IRibbonControl)
    MessageboxSuccess
End Sub
|}
|}


=== Menüband nachbearbeiten ===
=== Menüband nachbearbeiten ===


Die Voraussetzung für diese Schritte ist, dass Sie schon ein benutzerdefiniertes Menüband angelegt haben, denn dann können Sie viele der oben beschriebenen Arbeitsschritte abkürzen. So ist es zum Beispiel nicht mehr nötig, die .rels-Datei anzupassen. Wie Sie ein Menüband von Grund auf neu aufbauen finden Sie im Abschnitt [[#Neues Menüband anlegen|Neues Menüband anlegen]].
Die Voraussetzung für diese Schritte ist, dass Sie schon ein benutzerdefiniertes Menüband angelegt haben, denn dann können Sie viele der oben beschriebenen Arbeitsschritte abkürzen. So ist es zum Beispiel nicht mehr nötig, die .rels-Datei anzupassen.
{| class="wikitable"
 
Wie Sie ein Menüband von Grund auf neu aufbauen finden Sie im Abschnitt [[#Neues Menüband anlegen|Neues Menüband anlegen]].
 
{| class="wikitable"  
! style="text-align:left;" | Arbeitsschritt
! style="text-align:left;" | Arbeitsschritt
! style="text-align:left;" | Beschreibung
! style="text-align:left;" | Beschreibung
Zeile 211: Zeile 419:
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| ZIP-Datei öffnen
| ZIP-Datei öffnen
| Anstatt die enthaltenen Dateien und Verzeichnisse zu entpacken, öffnen Sie sie durch einen Doppelklick direkt im Datei-Explorer. |
| Anstatt die enthaltenen Dateien und Verzeichnisse zu entpacken, öffnen Sie sie durch einen Doppelklick direkt im Datei-Explorer.
|
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Die Datei 'customUI.xml' aus der ZIP-Datei herauskopieren
| Die Datei 'customUI.xml' aus der ZIP-Datei herauskopieren
Zeile 219: Zeile 428:
| Die Datei 'customUI.xml' anpassen
| Die Datei 'customUI.xml' anpassen
| Passen Sie die herauskopierte 'customUI.xml' an und speichern Sie die Änderungen. Verwenden Sie hierzu bitte einen XML-Editor Ihrer Wahl und NICHT den Windows Editor.
| Passen Sie die herauskopierte 'customUI.xml' an und speichern Sie die Änderungen. Verwenden Sie hierzu bitte einen XML-Editor Ihrer Wahl und NICHT den Windows Editor.
| [[Datei:Ribbon_05.png]]
| [[Datei:Ribbon_05.png]]
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Die Datei 'customUI.xml' in die Zwischenablage kopieren
| Die Datei 'customUI.xml' in die Zwischenablage kopieren
| Kopieren Sie die 'customUI.xml' in die Zwischenablage ('STRG+C'). |
| Kopieren Sie die 'customUI.xml' in die Zwischenablage ('STRG+C').
|
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| ZIP-Datei öffnen
| ZIP-Datei öffnen
| Öffnen Sie die ZIP-Datei, aus der Sie die customUI.xml kopiert haben, erneut durch einen Doppelklick. |
| Öffnen Sie die ZIP-Datei, aus der Sie die customUI.xml kopiert haben, erneut durch einen Doppelklick.
|
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Die Datei 'customUI.xml' in die ZIP-Datei einfügen
| Die Datei 'customUI.xml' in die ZIP-Datei einfügen
Zeile 233: Zeile 444:
| Dateiendung '.zip' entfernen
| Dateiendung '.zip' entfernen
| Entfernen Sie die Dateiendung '.zip' von der ZIP-Datei, damit der Original-Dateiname wieder hergestellt ist.
| Entfernen Sie die Dateiendung '.zip' von der ZIP-Datei, damit der Original-Dateiname wieder hergestellt ist.
| [[Datei:Ribbon_09.png]]  
| [[Datei:Ribbon_09.png]]
|} Im Anschluss können Sie die soeben durchgeführten Änderungen testen.
|}
 
Im Anschluss können Sie die soeben durchgeführten Änderungen testen.


=== Eigene Icons hinzufügen ===
=== Eigene Icons hinzufügen ===


Diese Beschreibung gilt für das Hinzufügen eigener Icons. Wenn Sie vorhandene (in der Office-Anwendung verwendete) Icons anzeigen möchten, verwenden Sie bitte die 'imageMso'-Eigenschaft. Da Sie für die folgenden Schritte neue Verzeichnisse und Dateien anlegen müssen, empfehlen wir, wie oben beschrieben die ZIP-Datei in ein neues Verzeichnis zu extrahieren und dort die Änderungen vorzunehmen (anstatt die Datei nur umzubenennen und die Änderungen direkt in der ZIP-Datei vorzunehmen).
Diese Beschreibung gilt für das Hinzufügen eigener Icons. Wenn Sie vorhandene (in der Office-Anwendung verwendete) Icons anzeigen möchten, verwenden Sie bitte die 'imageMso'-Eigenschaft.  
{| class="wikitable"
 
Da Sie für die folgenden Schritte neue Verzeichnisse und Dateien anlegen müssen, empfehlen wir, wie oben beschrieben die ZIP-Datei in ein neues Verzeichnis zu extrahieren und dort die Änderungen vorzunehmen (anstatt die Datei nur umzubenennen und die Änderungen direkt in der ZIP-Datei vorzunehmen).  
 
{| class="wikitable"  
! style="text-align:left;" | Arbeitsschritt
! style="text-align:left;" | Arbeitsschritt
! style="text-align:left;" | Beschreibung
! style="text-align:left;" | Beschreibung
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Bildvorgaben |
| Bildvorgaben
|
* Bevorzugt PNG (für Transparenzen)
* Bevorzugt PNG (für Transparenzen)
* Größen: Kleine Icons 16x16 Pixel, große Icons 32x32 Pixel
* Größen: Kleine Icons 16x16 Pixel, große Icons 32x32 Pixel
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Unterverzeichnis 'images' anlegen
| Unterverzeichnis 'images' anlegen
Zeile 257: Zeile 474:
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Datei 'customUI.xml.rels' anlegen
| Datei 'customUI.xml.rels' anlegen
| Legen Sie im neuen Unterverzeichnis '_rels' eine leere Textdatei 'customUI.xml.rels' an.
| Legen Sie im neuen Unterverzeichnis '_rels' eine leere Textdatei 'customUI.xml.rels' an.  
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Einträge in 'customUI.xml.rels'
| Einträge in 'customUI.xml.rels'
| [[Datei:Ribbon_17.png]] '''Grundstruktur:''' <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> </Relationships> '''Relationship für jedes Icon:''' <Relationship Id="'''ColorDialogChart'''" Target="images/ColorDialogChart.png" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
| [[Datei:Ribbon_17.png]]  
 
'''Grundstruktur:'''
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
</Relationships>
 
'''Relationship für jedes Icon:'''
<Relationship  
    Id="'''ColorDialogChart'''"  
    Target="images/ColorDialogChart.png"  
    Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
* Id: Der im Menüband verwendete Name des Bildes
* Id: Der im Menüband verwendete Name des Bildes
* Target: Pfadangabe zur Bilddatei (bitte nur Dateinamen anpassen)
* Target: Pfadangabe zur Bilddatei (bitte nur Dateinamen anpassen)
* Type: Wie hier angegeben (nicht ändern!)
* Type: Wie hier angegeben (nicht ändern!)  
|- style="vertical-align:top;"
|- style="vertical-align:top;"
| Icon einsetzen
| Icon einsetzen
| In der 'customUI.xml' können die hinzugefügten Bilder wie folgt eingesetzt werden: image="Id" wobei die Id aus dem Eintrag der Relationship stammt, zum Beispiel <button id="buttonColorChart" label="Diagramm färben" image="'''ColorDialogChart'''" onAction="buttonColorChart_onAction"/>  
| In der 'customUI.xml' können die hinzugefügten Bilder wie folgt eingesetzt werden:
image="Id"
wobei die Id aus dem Eintrag der Relationship stammt, zum Beispiel
<button id="buttonColorChart"
    label="Diagramm färben"  
    image="'''ColorDialogChart'''"
    onAction="buttonColorChart_onAction"/>  
|}
|}


Zeile 275: Zeile 509:
==== Reiter an erster Stelle platzieren ====
==== Reiter an erster Stelle platzieren ====


insertBeforeMso="TabHome"
insertBeforeMso="TabHome"


=== Interaktive Elemente ===
=== Interaktive Elemente ===
Zeile 283: Zeile 517:
==== Größenangaben ====
==== Größenangaben ====


Die Standardgröße ist 'normal', muss nicht angegeben werden und entspricht einer drittel Zeile. size="normal" Wenn ein Element eine gesamte Spalte in einer Gruppe einnehmen soll, geben Sie die Größe 'large' an. size="large"
Die Standardgröße ist 'normal', muss nicht angegeben werden und entspricht einer drittel Zeile.
 
size="normal"
 
Wenn ein Element eine gesamte Spalte in einer Gruppe einnehmen soll, geben Sie die Größe 'large' an.
 
size="large"


==== Beschriftung und zusätzliche Hilfestellung ====
==== Beschriftung und zusätzliche Hilfestellung ====


[[Datei:RibbonScreentipSupertip.png|300px|]] label="Beschriftung" screentip="Nähere Beschreibung" supertip="Ausführliche Beschreibung ... .&amp;#13;&amp;#13;Und welche durch Leerzeilen gegliedert werden kann!" '''Tipp:''' Mit '''&amp;#13;''' können Sie in einem 'supertip' einen Zeilenumbruch erzeugen. '''Achtung:'''' Das 'kaufmännische Und' (&) spielt in XML '''und''' im Menüband jeweils eine Sonderrolle, daher muss dieses bei Labels, Screentips und Supertips wie folgt angegeben werden: label="Vater <code>&amp;amp;&amp;amp;</code> Sohn" Hierbei wird das '&' selbst durch '&amp;amp;' ersetzt, weil es im XML ein besonderes Zeichen ist. Wegen der Sonderrolle im Menüband muss es dann zusätzlich noch verdoppelt werden!
[[Datei:RibbonScreentipSupertip.png|300px|]]
 
label="Beschriftung"
screentip="Nähere Beschreibung"
supertip="Ausführliche Beschreibung ... .&amp;#13;&amp;#13;Und welche durch Leerzeilen gegliedert werden kann!"
 
'''Tipp:''' Mit '''&amp;#13;''' können Sie in einem 'supertip' einen Zeilenumbruch erzeugen.
 
'''Achtung:'''' Das 'kaufmännische Und' (&) spielt in XML '''und''' im Menüband jeweils eine Sonderrolle, daher muss dieses bei Labels, Screentips und Supertips wie folgt angegeben werden:
 
label="Vater <code>&amp;amp;&amp;amp;</code> Sohn"
 
Hierbei wird das '&' selbst durch '&amp;amp;' ersetzt, weil es im XML ein besonderes Zeichen ist. Wegen der Sonderrolle im Menüband muss es dann zusätzlich noch verdoppelt werden!


==== Icons ====
==== Icons ====


Das Menüband bietet zwei Möglichkeiten, Icons anzuzeigen:
Das Menüband bietet zwei Möglichkeiten, Icons anzuzeigen:
* Sie können eigene Icons einsetzen (siehe [[#Eigene Icons hinzufügen|eigene Icons hinzufügen]])
* Sie können eigene Icons einsetzen (siehe [[#Eigene Icons hinzufügen|eigene Icons hinzufügen]])
* Sie können vorhandene Anwendungsicons verwenden Um Anwendungsicons zu verwenden, gehen Sie wie folgt vor: 1. Kennzeichner finden
* Sie können vorhandene Anwendungsicons verwenden
 
Um Anwendungsicons zu verwenden, gehen Sie wie folgt vor:
 
1. Kennzeichner finden
** In 'Datei', 'Optionen', 'Menüband anpassen' suchen Sie in der Liste von Befehlen den gewünschten Befehl, dessen Icon Sie verwenden möchten.
** In 'Datei', 'Optionen', 'Menüband anpassen' suchen Sie in der Liste von Befehlen den gewünschten Befehl, dessen Icon Sie verwenden möchten.
** Wenn Sie den gewünschten Befehl mit der Maus berühren (Mouseover), erscheint eine Direkthilfe, welche den aktuellen Reiter und den Namen des Befehls anzeigt.
** Wenn Sie den gewünschten Befehl mit der Maus berühren (Mouseover), erscheint eine Direkthilfe, welche den aktuellen Reiter und den Namen des Befehls anzeigt.
** Außerdem erscheint in diesem Hilfetext hinten in runden Klammern der interne Kennzeichner des Befehls. Notieren Sie diesen Kennzeichner. 2. Öffnen Sie die Datei 'customUI.xml' wie oben beschrieben und fügen Sie dem entsprechenden Element folgende Eigenschaft hinzu: imageMso="Kennzeichner" 4. Änderungen speichern, zippen und in die Originaldatei umbenennen. 3. Testen und fertig!
** Außerdem erscheint in diesem Hilfetext hinten in runden Klammern der interne Kennzeichner des Befehls. Notieren Sie diesen Kennzeichner.
2. Öffnen Sie die Datei 'customUI.xml' wie oben beschrieben und fügen Sie dem entsprechenden Element folgende Eigenschaft hinzu:
 
imageMso="Kennzeichner"
 
4. Änderungen speichern, zippen und in die Originaldatei umbenennen.
3. Testen und fertig!


== Fehlermeldungen ==
== Fehlermeldungen ==


;Fehler sichtbar machen
;Fehler sichtbar machen
* 'Datei', 'Optionen', 'Erweitert', 'Allgemein', 'Fehler von Benutzeroberflächen-Add-Ins anzeigen' Manchmal kann die Datei, in der Sie Änderungen am Menüband vorgenommen haben, nicht mehr geöffnet werden bzw. Sie erhalten Fehlermeldungen, wenn Sie sie öffnen. Diese können auch dann auftreten, wenn Sie nur kleine Änderungen an der 'customUI.xml'-Datei einer eben noch funktionsfähigen Version vorgenommen haben. Bei gravierenden Fehlern, wie falsch vergebenen oder falsch geschriebenen Eigenschaften in der Datei 'customUI.xml' oder fehlenden Referenzen in der '.rels'-Datei, werden Sie den Fehler finden und beseitigen müssen. Bei kleineren Problemen, die unwillkürlich beim erneuten Zippen der OOXML-Datei auftreten können, kann die Anwendung selbst versuchen, die Inhalte wiederherzustellen:
* 'Datei', 'Optionen', 'Erweitert', 'Allgemein', 'Fehler von Benutzeroberflächen-Add-Ins anzeigen'
 
Manchmal kann die Datei, in der Sie Änderungen am Menüband vorgenommen haben, nicht mehr geöffnet werden bzw. Sie erhalten Fehlermeldungen, wenn Sie sie öffnen. Diese können auch dann auftreten, wenn Sie nur kleine Änderungen an der 'customUI.xml'-Datei einer eben noch funktionsfähigen Version vorgenommen haben.
 
Bei gravierenden Fehlern, wie falsch vergebenen oder falsch geschriebenen Eigenschaften in der Datei 'customUI.xml' oder fehlenden Referenzen in der '.rels'-Datei, werden Sie den Fehler finden und beseitigen müssen.
 
Bei kleineren Problemen, die unwillkürlich beim erneuten Zippen der OOXML-Datei auftreten können, kann die Anwendung selbst versuchen, die Inhalte wiederherzustellen:


=== Besonderheiten bei Word ===
=== Besonderheiten bei Word ===


Wenn die Probleme mit dem Menüband mit einer [[Word Add-Ins|globalen Vorlage]] bestehen, erscheint folgende Fehlermeldung: [[Datei:Diese_Dokumentvorlage_kann_von_Word_nicht_geöffnet_werden.png]] Öffnen Sie in diesem Fall die globale Vorlage und verfahren Sie wie im Folgenden beschrieben. Wenn Sie versuchen, die Datei aus der Liste der 'zuletzt verwendeten Dokumente' zu öffnen, kann folgende weitere Fehlermeldung erscheinen: [[Datei:Wir_konnten_die_Datei_nicht_finden.png]] Öffnen Sie in diesem Fall die Datei direkt aus dem Datei-Explorer.
Wenn die Probleme mit dem Menüband mit einer [[Word Add-Ins|globalen Vorlage]] bestehen, erscheint folgende Fehlermeldung:
 
[[Datei:Diese_Dokumentvorlage_kann_von_Word_nicht_geöffnet_werden.png]]
 
Öffnen Sie in diesem Fall die globale Vorlage und verfahren Sie wie im Folgenden beschrieben. Wenn Sie versuchen, die Datei aus der Liste der 'zuletzt verwendeten Dokumente' zu öffnen, kann folgende weitere Fehlermeldung erscheinen:
 
[[Datei:Wir_konnten_die_Datei_nicht_finden.png]]
 
Öffnen Sie in diesem Fall die Datei direkt aus dem Datei-Explorer.


=== Datei reparieren lassen ===
=== Datei reparieren lassen ===


Wenn Reparatur-Bedarf besteht, werden folgende Meldungen angezeigt: [[Datei:Leider_kann_'Datei'_nicht_geöffnet_werden_da_der_Inhalt_Probleme_verursacht.png]] Wenn Sie die Details anzeigen lassen: [[Datei:Leider_kann_'Datei'_nicht_geöffnet_werden_da_der_Inhalt_Probleme_verursacht_Deatails.png]] Bestätigen Sie mit 'OK'. [[Datei:Von_Word_wurde_nicht_lesbarer_Inhalt_in_Datei_gefunden.png]] Bestätigen Sie mit 'Ja', damit der Inhalt wiederhergestellt werden kann. Testen Sie nun alle Änderungen und speichern Sie gegebenenfalls die neu erstellte Datei: [[Datei:Möchten_Sie_die_Änderungen_speichern.png]]
Wenn Reparatur-Bedarf besteht, werden folgende Meldungen angezeigt:
 
[[Datei:Leider_kann_'Datei'_nicht_geöffnet_werden_da_der_Inhalt_Probleme_verursacht.png]]
 
Wenn Sie die Details anzeigen lassen:
 
[[Datei:Leider_kann_'Datei'_nicht_geöffnet_werden_da_der_Inhalt_Probleme_verursacht_Deatails.png]]
 
Bestätigen Sie mit 'OK'.
 
[[Datei:Von_Word_wurde_nicht_lesbarer_Inhalt_in_Datei_gefunden.png]]
 
Bestätigen Sie mit 'Ja', damit der Inhalt wiederhergestellt werden kann.
 
Testen Sie nun alle Änderungen und speichern Sie gegebenenfalls die neu erstellte Datei:
 
[[Datei:Möchten_Sie_die_Änderungen_speichern.png]]
 


== Tipps und Tricks ==
== Tipps und Tricks ==


[[Datei:Notepadpluspluspreparexml.png]]
[[Datei:Notepadpluspluspreparexml.png]]

Version vom 10. Oktober 2018, 15:48 Uhr

Vorbereitungen

Um eventuelle Fehlermeldungen, welche durch eine fehlerhafte Definition des Menübandes entstehen, angezeigt zu bekommen, nehmen Sie bitte folgende Einstellung in Ihrer Office-Anwendung vor:

  • Datei, Optionen, Erweitert, Allgemein, Fehler des Benutzerflächen-Add-Ins anzeigen aktivieren


Wichtigste Grundlagen

Die Grundstruktur der customUI.xml werden Sie im Beispiel kennenlernen bzw. wird Ihnen freundlicherweise vom CustomUIEditor vorgegeben. Bitte ändern Sie ausschließlich nur solche Werte, deren Auswirkung Sie verstehen und beabsichtigen.

OOXML

Seit Office 2007 wird das Office Open XML Dateiformat eingesetzt. Die Beschreibung, Inhalte, Bilder und Eigenschaften einer Office-Datei werden hierbei in XML- (bzw. Bild-) Dateien gespeichert und anschließend im ZIP-Format komprimiert. Wenn Sie sich diese Struktur ansehen möchten, können Sie einer beliebige Office-Datei (dotm, pptx, xlsm, ...) ein '.zip' anhängen und dann die Datei als ZIP-Datei öffnen:

Ribbon 03.png

Die geöffnete Datei sieht in etwa so aus (Beispiel Word Dokument):

Ribbon 15.png

Auf oberster Ebene erscheint immer die Datei '[Content_Types].xml', alle weiteren Inhalte sind auf diverse Verzeichnisse aufgeteilt.

Bitte beachten: Die Beziehungen und Zusammenhänge innerhalb der Struktur einer OOXML-Datei folgen sehr strikten Vorgaben und müssen bei Änderungen sehr genau eingehalten werden, sonst kann der Inhalt der OOXML-Datei eventuell nicht mehr von der dazugehörigen Office-Anwendung interpretiert (geöffnet) werden kann.

XML

Wie funktioniert das Menüband?

Das Office Menüband, welches seit Office 2007 verwendet wird, bietet seine Funktionen über Reiter, Gruppen und Knöpfe (Untermenüs, Eingabefelder etc.) an. Diese Struktur ist zwingend vorgegeben -- ein Element, welches auf Benutzereingaben reagiert (wie ein Knopf, ein Eingabefeld etc.) muss sich in einer Gruppe befinden, und jede Gruppe muss in einem Reiter abgelegt sein.

Dabei können Sie auf jeder Ebene ein eingebautes Element der Menüleiste verwenden. Wenn Sie zum Beispiel einen Knopf in einer eigenen Gruppe im Start-Reiter unterbringen möchten, adressieren Sie den Reiter mit

<tab idMso="TabHome">

wobei die nötigen Einstellungen mit den Suchbegriffen 'Liste der idMso' gefunden werden können.

Ein eigener Reiter würde hingegen mit einer eigenen 'id' bezeichnet:

<tab id="tabWorkbookAssistant">

Bitte beachten: Wenn Sie mehrere Dateien öffnen, welche Anpassungen des Menübandes enthalten und die gleiche 'id' verwendet haben, werden die Elemente mehrfach in der Benutzeroberfläche erscheinen!

customUI.xml

Eigene Erweiterungen des Menübandes werden in der in Office 2007 eingeführten XML-Struktur untergebracht. Das neue Dateiformat besteht aus gezippten XML-Dateien, welche die verschiedenen Aspekte der Datei abbilden, wie Eigenschaften, Einstellungen, und Inhalt der Datei. Wenn Sie einer beliebige Office-Datei (docx, xlsm, pptx, ...) ein '.zip' anhängen und diese dann öffnen, sehen Sie genau diese XML-Struktur.

Bitte beachten Sie jedoch, dass Änderungen an den XML-Dateien immer potenziell auch dazu führen können, dass die Datei danach nicht mehr von der Anwendung geöffnet werden kann. Daher sollten Sie vor Änderungen sicherheitshalber immer eine Kopie des Originals anfertigen.

Die Anpassung des Menübandes wird entsprechend in einer eigenen XML-Datei definiert, welches in der oben beschriebenen Struktur untergebracht wird. Die hauptsächlich dafür benötigte Datei heißt 'customUI.xml' -- wie Sie diese anlegen und bearbeiten, erfahren Sie weiter unten.

Wichtige Eigenschaften

id
  • Die 'id' ist der intern verwendete Name des Elementes und muss ausdrücklich bei den meisten Elementen angegeben werden
    • Ausnahmen: <customUI>, <ribbon>, <backstage>, <tabs>
  • Wenn Sie ein eingebautes Element verwenden möchten, geben Sie statt der 'id' die gewünschte 'idMso' an
<button idMso="FilePrintQuick"/>
  • Wichtig: Bitte verwenden Sie in der 'id'-Eigenschaft ausschließlich Buchstaben, Ziffern und Unterstriche!
label
  • Das 'label' ist der sichtbare Name eines sichtbaren Elementes, wie <tab>, <group>, <button> etc.
    • Kein 'label' erhalten unter anderem: <customUI>, <ribbon>, <backstage>, <tabs>
  • Hier können beliebige Zeichen, Ziffern etc. angegeben werden
  • Wichtig: Wenn Sie Umlaute, Accents oder sonstige Sonderzeichen verwenden, achten Sie zwingend darauf, dass in Ihrem XML-Editor die korrekte Kodierung eingestellt ist (in der Regel 'UTF-8')!
onAction
  • Die 'onAction'-Eigenschaft gibt den Namen der Callback-Prozedur an, die beim Betätigen eines Elementes ausgeführt werden soll
  • Dieser Name muss der Benennungs-Konvention von VBA folgen (Beginn mit einem Buchstaben, kann Buchstaben, Ziffern und Unterstriche enthalten, Umlaute vermeiden)
  • Siehe auch Callback-Prozedur.

Dynamische Eigenschaften

Generell werden die Eigenschaften von Elementen des Menübandes statisch angegeben, wie zum Beispiel die 'id', welche niemals nachträglich geändert werden kann. Andere Eigenschaften können beim Einlesen des Menübandes per Programmierung vorgegeben werden und bleiben danach statisch, wie zum Beispiel die sprachabhängige Beschriftung von Elementen. Eine letzte Gruppe von Eigenschaften kann situationsabhängig immer wieder neue Werte annehmen, wie zum Beispiel die Verfügbarkeit einer Funktion abhängig von der aktuellen Auswahl.

Dynamische Eigenschaften tragen in ihren Namen ein 'get'. Der Wert ist dann der Name der Callback-Prozedur:

Statische Eigenschaft Dynamische Eigenschaft Beispiel Callback-Prozedur
label getLabel
<button id="buttonTest" getLabel="buttonTest_getLabel"/>
Sub buttonTest_getLabel(control As IRibbonControl, ByRef label) 

    label = "Beschriftung"
End Sub
image getImage
<button id="buttonTest" getImage="buttonTest_getImage"/>
Sub buttonTest_getImage(control As IRibbonControl, ByRef image) 

    image = "EigenesIcon"
End Sub
enabled getEnabled
<button id="buttonTest" getEnabled="buttonTest_getEnabled"/>
Sub buttonTest_getEnabled(control As IRibbonControl, ByRef enabled) 

    If Bedingungerfüllt Then
        enabled = True
    End If
End Sub
visible getVisible
<button id="buttonTest" getVisible="buttonTest_getVisible"/>
Sub buttonTest_getVisible(control As IRibbonControl, ByRef visible) 

    If Bedingungerfüllt Then
        visible = True
    End If
End Sub

usw. (bitte beachten Sie, dass nicht jede Eigenschaft eine dynamische Entsprechung hat!)

Callbacks

Sogenannte Callback-Prozeduren stellen die Schnittstelle zwischen den in der XML-Struktur definierten Anpassungen des Menübandes und der Programmierung dar. Callbacks werden typischerweise in 'onAction' und dynamischen Eigenschaften verwendet.

Beispiel 'customUI.xml':

<button id="buttonPressMe"  
   label="Press Me" 
   getEnabled="butonPressMe_getEnabled"
   onAction="buttonPressMe_onAction"/>


Dazu passende Callback-Prozeduren:

Public Sub butonPressMe_getEnabled(ByVal Control As IRibbonControl, ByRef enabled)
    
    ' enabled = SollKnopfAktivSein()
End Sub
Public Sub buttonPressMe_onAction(ByVal Control As IRibbonControl)
    
    ' DiesSollAufKnopfdruckGeschehen
End Sub
  • Beachten Sie, dass eine Callback-Prozedur bestimmte Übergabeparameter liefert und diese auch erwartet.
  • Rückgabewerte werden 'ByRef' übergeben.
  • Der Parameter 'Control' enthält unter anderem die 'id' des aufrufenden Elementes und kann somit diesem zugeordnet werden. So können Sie zum Beispiel alle 'getLabel'-Callbacks in einer Prozedur sammeln und anhand der Control.ID feststellen, welcher Text welchem Element zugeordnet werden soll:

Beispiel einer Sammel-Callback-Lösung

Im Beispiel wird zusätzlich zum Namen der Callback-Prozedur dessen Modul angegeben, durch einen Punkt getrennt.

<tab id="tabWorkbookAssistant" 
   getLabel="RibbonLocalization.LocalizeLabel"
   insertBeforeMso="TabHome"
   getVisible="RibbonCommands.ControlIsVisible">
   <group id="groupColorTools" 
       getLabel="RibbonLocalization.LocalizeLabel" 
       getVisible="RibbonCommands.ControlIsVisible">
       <button id="buttonColorDialog"
           getLabel="RibbonLocalization.LocalizeLabel"
           onAction="RibbonCommands.ShowColorDialog"
           getEnabled="RibbonCommands.CanColorElement" />
           
           ...

Im Modul 'RibbonLocalization' befindet sich folgende Callback-Prozedur:

Public Sub LocalizeLabel(control As IRibbonControl, ByRef Label)
    
    Label = FindTranslation(control.ID)
End Sub

Die 'control.ID' wird dazu verwendet, die passende Beschriftung für das jeweilige Element zu finden.

Anpassbare Bereiche

Folgende Bereiche der Benutzeroberfläche können erweitert und angepasst werden:

Menüband (ribbon)

Das Menüband ist der prominenteste Bereich der Benutzeroberfläche von Office seit Version 2007. Es enthält die Reiter (tabs, tab), welche wiederum einzelne Gruppen (group)enthalten können, in welchen dann die ausführbaren Elemente der Benutzeroberfläche untergebracht werden, wie Knöpfe und Menüs.

Zusätzlich enthält dieser Bereich auch die Schnellzugriffleiste (qat), welche oben links in der Titelleiste angezeigt wird.

Ab Office 2010: Backstage (backstage)

Die Backstage ist der Aufgabenbereich, welcher sich unter dem Reiter 'Datei' öffnet. Standardmäßig enthält er die eigenen Reiter 'Informationen', 'Neu', 'Öffnen', 'Drucken' etc.

Dieser Aufgabenbereich kann sehr stark beeinflusst werden -- Sie können Elemente ausblenden, hinzufügen und bestehenden Elementen neue Aufgaben erteilen.

Bitte beachten: Die Anpassung des Backstages ist erst mit Office 2010 möglich -- sie kann daher nur in einer customUI.xml eingesetzt werden, welche wie folgt eingerichtet ist:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <backstage>
  </backstage>
</customUI>

Sie müssten entsprechend auch in der .rels-Datei den passenden Eintrag vornehmen.

Bitte beachten

  • Seien Sie bei der Benennung der Elemente und der Callback-Prozeduren einheitlich, um später jederzeit nachvollziehen zu können, welcher Knopf welche Calback-Prozedur aufruft.
  • Die Callback-Prozeduren können nicht in einem Klassenmodul abgelegt werden!

Zusätzliche Quellen

Eine vollständige und umfassende Beschreibung des Menübandes sowie aller Controls und Eigenschaften finden Sie hier: www.accessribbon.de

Diese Seite wurde für Access-Entwickler geschrieben, alle Beispiele sowie sämtliche Angaben betreffen bis auf wenige Ausnahmen alle Office-Anwendungen mit Menüband, also auch Excel, PowerPoint und Word.

Werkzeuge

CustomUIEditor

Ursprünglich wurde von Microsoft ein Editor speziell zur Bearbeitung des Menübandes zur Verfügung gestellt:

CustomUIEditor.png

Dieser scheint nicht mit allen Windows-Versionen kompatibel zu sein und wurde seit 2009 (für die Erweiterungen, welche Office 2010 anbietet) nicht weiter entwickelt. Auf Windows 8.1 ist die letzte Version jedoch lauffähig.

Vorteile

  • Schnelle und direkte Möglichkeit, Menüband anzupassen
  • Enthält einige Beispiele für den Einstieg
  • Enthält rudimentäre Prüfung des XML-Codes
  • Übernimmt automatisch Einträge in rels-Dateien
  • Ermöglicht das direkte Einbinden eigener Icons

Nachteile

  • Die Beispiele müssen teilweise angepasst werden, weil sie nur für 2010 geschrieben sind (Office/2009/07 muss heißen Office/2006/01)
  • Editor unkomfortabel
  • Größere Anpassungen führen zu unwillkürlichem Springen im Editor
  • XML muss (von Beispielen abgesehen) selbst formuliert werden (mögliche Elemente und Eigenschaften werden nicht angeboten)

Download und Quelle
Download der aktuellen Version: Datei:OfficeCustomUIEditorSetup.zip
Ursprüngliche Quelle: openxmldeveloper.org

Aufbau und Bearbeitung ohne Hilfsmittel

Diese Beschreibung erläutert den händischen Aufbau eines eigenen Menübandes und setzt voraus, dass Sie die Office-Datei entpacken können und dass Sie einen XML-Editor einsetzen.

Neues Menüband anlegen

Folgende Schritte führen zu einem neu erstellten Menüband. Wenn Sie an einem schon vorhandenen, selbst gebauten Menüband Änderungen vornehmen möchten, sehen Sie bitte weiter unten den Abschnitt Menüband nachbearbeiten.

Arbeitsschritt Beschreibung Screenshot / Code
Vorbereitungen Gewünschte Funktionalitäten implementieren und testen. Ribbon 01.png
Datei als .*m speichern und schließen Speichern Sie die Datei in einem der .*m-Formate ab: docm, dotm (Word), xlsm, xlam (Excel) oder pptm, ppam (PowerPoint).

Anschließend schließen Sie bitte die Datei.

Ribbon 02.png
Datei in *.zip umbenennen Ribbon 03.png
Datei in *.zip umbenennen Bestätigen Sie den Dialog mit 'Ja', damit die Datei umbenannt werden kann. Ribbon 16.png
ZIP-Datei in ein Verzeichnis entpacken Entpacken Sie die in der ZIP-Datei enthaltenen Dateien in ein Verzeichnis. Ribbon 13.png
ZIP-Datei in ein Verzeichnis entpacken Standardmäßig wird Ihnen ein Unterverzeichnis mit dem Namen der ZIP-Datei angeboten. Ribbon 14.png
Verzeichnis öffnen Öffnen Sie anschließend das neue Verzeichnis (nicht die ZIP-Datei!)

Die Datei- und Verzeichnisstruktur sollte ähnlich wie hier abgebildet erscheinen. Dieses Beispiel zeigt eine Word-Vorlage, bei Excel bzw. PowerPoint erscheint statt dem Unterverzeichnis 'Word' ein entsprechend anderes Unterverzeichnis.

Ribbon 15.png
customUI anlegen Legen Sie im Basisverzeichnis der XML-Struktur das Verzeichnis 'customUI' an. Erstellen Sie in diesem Verzeichnis eine neue Textdatei und nennen Sie diese in 'customUI.xml' um. Ribbon 04.png
customUI.xml öffnen Öffnen Sie in einem XML-Editor Ihrer Wahl die neue Datei 'customUI.xml'. Sie wird ursprünglich leer sein.
customUI.xml Grundstruktur einfügen Fügen Sie den nebenstehenden Text in Ihre customUI.xml-Datei ein.

Diese beispielhafte Grundstruktur enthält einen neuen Reiter, eine Gruppe und einen Knopf, der die im ersten Arbeitsschritt gezeigte Prozedur aufrufen soll.

Achtung: Nach dem Einfügen des Beispielcodes anhand des Screenshots auf Vollständigkeit prüfen und sicherstellen, dass in keinen Namen oder Eigenschaften Leerzeichen oder Zeilenumbrüche erscheinen!!!

Bitte beachten: Keine Umlaute oder sonstige Sonderzeichen verwenden (auch nicht in Labels, Screentips usw.), wenn Sie die Dateien mit dem Notepad (Editor) bearbeiten!!!

Bitte zusätzlich beachten: Manchmal suchen sich XML-Editoren unpassende Kodierungs-Einstellungen -- stellen Sie sicher, dass bei 'Encoding', 'Character Set' oder ähnlichen Einstellungen die Option 'UTF-8' verwendet wird!

Vorschau:

Ribbon 05.png


Kopiervorlage:

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon startFromScratch="false">
    <tabs>
      <tab id="tabCustom"
        label="My Custom Tab">
        <group id="groupCustom"
          label="My Custom Group">
          <button id="buttonPressMe"
            label="Press Me"
            onAction="buttonPressMe_onAction"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
customUI.xml speichern Speichern Sie die Änderungen in der Datei 'customUI.xml
_rels\.rels öffnen Die Datei '.rels' im Verzeichnis '_rels' im Notepad oder einem XML-Editor öffnen.

Achtung: Diese Datei niemals umbenennen, um sie in einem XML-Editor zu öffnen!!! Windows wird Ihnen u. U. später die Rückbenennung von '.rels.xml' in '.rels' verweigern!!!

Ribbon 06.png
_rels\.rels erweitern Die neue customUI muss in der '.rels' Datei als neue Relationship (Beziehung) eingetragen werden. Kopieren Sie dazu den nebenstehenden Text in die Datei.

Wichtig: Achten Sie darauf, dass die neue 'Relationship' wie in der Vorschau gezeigt zwischen den 'Relationships'-Tags platziert ist.

Um Ihnen eine bessere Übersicht über die Datei zu verschaffen, können Sie zwischen jedes '><' (Größer als / Kleiner als) einen Zeilenumbruch einfügen.

Passen Sie die Eigenschaft 'Id' entsprechend der schon vorhandenen Ids an: Wenn die hier verwendete Id 'rId4' schon existiert, verwenden Sie den nächst höhere, noch nicht verwendeten Index.

Bitte beachten: Vor 'Type' und vor 'Target' muss ein Leerzeichen stehen!

Vorschau:

Ribbon 07.png

Kopiervorlage:

<Relationship 
    Id="rId4" 
    Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" 
    Target="customUI/customUI.xml"/>
Verzeichnis zippen Alle Verzeichnisse und Dateien im Basisverzeichnis der ursprünglich entzippten Office-Datei wieder zippen. Verwenden Sie hierzu den von Windows angebotenen Zipper, um sicherzustellen, dass hierbei keine später für die Office-Anwendung nicht lesbaren Dateien entstehen. Ribbon 08.png
ZIP umbenennen Benennen Sie die neu gezippte Datei mit der Original-Dateiendung um und verschieben Sie die Datei an ihren Originalplatz.

Wenn Sie darauf hingewiesen werden, dass die Datei durch die neue Endung eventuell unbrauchbar wird, fahren Sie trotzdem mit 'Ja' fort.

Ribbon 09.png

Datei umbenennen.png

Datei öffnen Öffnen Sie die Datei aus dem Datei-Explorer heraus bzw. starten Sie die Anwendung, um das Add-In zu laden. Wenn eine Fehlermeldung erscheint, bestätigen Sie mit 'Ja', dass Sie fortfahren möchten.
Erster Test Der neue Reiter erscheint am rechten Ende des Menübandes. Wenn Sie auf den neuen Knopf drücken, erscheint eine Fehlermeldung: Ribbon 10.png
onAction-Prozedur (Callback) Wenn der Knopf 'buttonPressMe' gedrückt wird, erwartet dieser, eine öffentliche Prozedur mit dem in der Eigenschaft 'onAction' angegebenen Namen vorzufinden.

Wichtig: Diese Callback-Prozedur erhält ein Control als Übergabeparameter. Dieser muss korrekt angegeben werden, sonst kann kein Aufruf an die Callback-Prozedur erfolgen!

Bitte beachten: Denken Sie daran, dass Sie statt 'MessageboxSuccess' die Prozedur eintragen, welche Sie beim Drücken des Knopfes aufrufen möchten!

Zur Information: In Excel kann das Callback auch als 'Private Sub' angelegt werden, in PowerPoint muss es 'Public' sein.

Ribbon 11.png

Kopiervorlage:

Public Sub buttonPressMe_onAction(ByVal Control As IRibbonControl)

    MessageboxSuccess
End Sub

Menüband nachbearbeiten

Die Voraussetzung für diese Schritte ist, dass Sie schon ein benutzerdefiniertes Menüband angelegt haben, denn dann können Sie viele der oben beschriebenen Arbeitsschritte abkürzen. So ist es zum Beispiel nicht mehr nötig, die .rels-Datei anzupassen.

Wie Sie ein Menüband von Grund auf neu aufbauen finden Sie im Abschnitt Neues Menüband anlegen.

Arbeitsschritt Beschreibung Screenshot / Code
Datei umbenennen Benennen Sie die *.*m-Datei in eine ZIP-Datei um, indem Sie '.zip' an den Dateinamen anhängen.]]
So sparen Sie später den Schritt, die Original-Dateiendung wieder anhängen zu müssen.
Ribbon 03.png
ZIP-Datei öffnen Anstatt die enthaltenen Dateien und Verzeichnisse zu entpacken, öffnen Sie sie durch einen Doppelklick direkt im Datei-Explorer.
Die Datei 'customUI.xml' aus der ZIP-Datei herauskopieren Gehen Sie in das Unterverzeichnis 'customUI' und kopieren Sie von dort die Datei 'customUI.xml' in ein anderes Verzeichnis außerhalb der ZIP-Datei.
Bitte beachten: Sie können zwar Dateien direkt aus der ZIP-Datei heraus öffnen, aber die Änderungen nicht speichern!
Ribbon 04.png
Die Datei 'customUI.xml' anpassen Passen Sie die herauskopierte 'customUI.xml' an und speichern Sie die Änderungen. Verwenden Sie hierzu bitte einen XML-Editor Ihrer Wahl und NICHT den Windows Editor. Ribbon 05.png
Die Datei 'customUI.xml' in die Zwischenablage kopieren Kopieren Sie die 'customUI.xml' in die Zwischenablage ('STRG+C').
ZIP-Datei öffnen Öffnen Sie die ZIP-Datei, aus der Sie die customUI.xml kopiert haben, erneut durch einen Doppelklick.
Die Datei 'customUI.xml' in die ZIP-Datei einfügen Fügen Sie die kopierte 'customUI.xml' zurück in das Verzeichnis 'customUI' in der ZIP-Datei ein ('STRG+V'). Ribbon 04.png
Dateiendung '.zip' entfernen Entfernen Sie die Dateiendung '.zip' von der ZIP-Datei, damit der Original-Dateiname wieder hergestellt ist. Ribbon 09.png

Im Anschluss können Sie die soeben durchgeführten Änderungen testen.

Eigene Icons hinzufügen

Diese Beschreibung gilt für das Hinzufügen eigener Icons. Wenn Sie vorhandene (in der Office-Anwendung verwendete) Icons anzeigen möchten, verwenden Sie bitte die 'imageMso'-Eigenschaft.

Da Sie für die folgenden Schritte neue Verzeichnisse und Dateien anlegen müssen, empfehlen wir, wie oben beschrieben die ZIP-Datei in ein neues Verzeichnis zu extrahieren und dort die Änderungen vorzunehmen (anstatt die Datei nur umzubenennen und die Änderungen direkt in der ZIP-Datei vorzunehmen).

Arbeitsschritt Beschreibung
Bildvorgaben
  • Bevorzugt PNG (für Transparenzen)
  • Größen: Kleine Icons 16x16 Pixel, große Icons 32x32 Pixel
Unterverzeichnis 'images' anlegen Legen Sie im Verzeichnis 'customUI' ein neues Unterverzeichnis 'images' an.
Icon-Dateien in 'images' kopieren Kopieren Sie die gewünschten Icon-Bild-Dateien in das Verzeichnis 'images'
Unterverzeichnis '_rels' anlegen Legen Sie im Verzeichnis 'customUI' ein neues Unterverzeichnis '_rels' an.
Datei 'customUI.xml.rels' anlegen Legen Sie im neuen Unterverzeichnis '_rels' eine leere Textdatei 'customUI.xml.rels' an.
Einträge in 'customUI.xml.rels' Ribbon 17.png

Grundstruktur:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
</Relationships>

Relationship für jedes Icon:

<Relationship 
    Id="ColorDialogChart" 
    Target="images/ColorDialogChart.png" 
    Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
  • Id: Der im Menüband verwendete Name des Bildes
  • Target: Pfadangabe zur Bilddatei (bitte nur Dateinamen anpassen)
  • Type: Wie hier angegeben (nicht ändern!)
Icon einsetzen In der 'customUI.xml' können die hinzugefügten Bilder wie folgt eingesetzt werden:
image="Id"

wobei die Id aus dem Eintrag der Relationship stammt, zum Beispiel

<button id="buttonColorChart"  
    label="Diagramm färben" 
    image="ColorDialogChart"
    onAction="buttonColorChart_onAction"/> 

Liste interessanter Eigenschaften und Einstellungen

Reiter

Reiter an erster Stelle platzieren

insertBeforeMso="TabHome"

Interaktive Elemente

Interaktive Elemente sind solche Elemente der Menüleiste, welche der Anwender auswählen kann, um etwas zu bewirken, wie Knöpfe und Menüs. Im Gegensatz dazu stehen Reiter und Gruppen, welche als Container für interaktive Elemente dienen.

Größenangaben

Die Standardgröße ist 'normal', muss nicht angegeben werden und entspricht einer drittel Zeile.

size="normal"

Wenn ein Element eine gesamte Spalte in einer Gruppe einnehmen soll, geben Sie die Größe 'large' an.

size="large"

Beschriftung und zusätzliche Hilfestellung

RibbonScreentipSupertip.png

label="Beschriftung"
screentip="Nähere Beschreibung"
supertip="Ausführliche Beschreibung ... .&#13;&#13;Und welche durch Leerzeilen gegliedert werden kann!"

Tipp: Mit &#13; können Sie in einem 'supertip' einen Zeilenumbruch erzeugen.

Achtung:' Das 'kaufmännische Und' (&) spielt in XML und im Menüband jeweils eine Sonderrolle, daher muss dieses bei Labels, Screentips und Supertips wie folgt angegeben werden:

label="Vater &amp;&amp; Sohn"

Hierbei wird das '&' selbst durch '&amp;' ersetzt, weil es im XML ein besonderes Zeichen ist. Wegen der Sonderrolle im Menüband muss es dann zusätzlich noch verdoppelt werden!

Icons

Das Menüband bietet zwei Möglichkeiten, Icons anzuzeigen:

Um Anwendungsicons zu verwenden, gehen Sie wie folgt vor:

1. Kennzeichner finden

    • In 'Datei', 'Optionen', 'Menüband anpassen' suchen Sie in der Liste von Befehlen den gewünschten Befehl, dessen Icon Sie verwenden möchten.
    • Wenn Sie den gewünschten Befehl mit der Maus berühren (Mouseover), erscheint eine Direkthilfe, welche den aktuellen Reiter und den Namen des Befehls anzeigt.
    • Außerdem erscheint in diesem Hilfetext hinten in runden Klammern der interne Kennzeichner des Befehls. Notieren Sie diesen Kennzeichner.

2. Öffnen Sie die Datei 'customUI.xml' wie oben beschrieben und fügen Sie dem entsprechenden Element folgende Eigenschaft hinzu:

imageMso="Kennzeichner"

4. Änderungen speichern, zippen und in die Originaldatei umbenennen. 3. Testen und fertig!

Fehlermeldungen

Fehler sichtbar machen
  • 'Datei', 'Optionen', 'Erweitert', 'Allgemein', 'Fehler von Benutzeroberflächen-Add-Ins anzeigen'

Manchmal kann die Datei, in der Sie Änderungen am Menüband vorgenommen haben, nicht mehr geöffnet werden bzw. Sie erhalten Fehlermeldungen, wenn Sie sie öffnen. Diese können auch dann auftreten, wenn Sie nur kleine Änderungen an der 'customUI.xml'-Datei einer eben noch funktionsfähigen Version vorgenommen haben.

Bei gravierenden Fehlern, wie falsch vergebenen oder falsch geschriebenen Eigenschaften in der Datei 'customUI.xml' oder fehlenden Referenzen in der '.rels'-Datei, werden Sie den Fehler finden und beseitigen müssen.

Bei kleineren Problemen, die unwillkürlich beim erneuten Zippen der OOXML-Datei auftreten können, kann die Anwendung selbst versuchen, die Inhalte wiederherzustellen:

Besonderheiten bei Word

Wenn die Probleme mit dem Menüband mit einer globalen Vorlage bestehen, erscheint folgende Fehlermeldung:

Diese Dokumentvorlage kann von Word nicht geöffnet werden.png

Öffnen Sie in diesem Fall die globale Vorlage und verfahren Sie wie im Folgenden beschrieben. Wenn Sie versuchen, die Datei aus der Liste der 'zuletzt verwendeten Dokumente' zu öffnen, kann folgende weitere Fehlermeldung erscheinen:

Wir konnten die Datei nicht finden.png

Öffnen Sie in diesem Fall die Datei direkt aus dem Datei-Explorer.

Datei reparieren lassen

Wenn Reparatur-Bedarf besteht, werden folgende Meldungen angezeigt:

Leider kann 'Datei' nicht geöffnet werden da der Inhalt Probleme verursacht.png

Wenn Sie die Details anzeigen lassen:

Leider kann 'Datei' nicht geöffnet werden da der Inhalt Probleme verursacht Deatails.png

Bestätigen Sie mit 'OK'.

Von Word wurde nicht lesbarer Inhalt in Datei gefunden.png

Bestätigen Sie mit 'Ja', damit der Inhalt wiederhergestellt werden kann.

Testen Sie nun alle Änderungen und speichern Sie gegebenenfalls die neu erstellte Datei:

Möchten Sie die Änderungen speichern.png


Tipps und Tricks

Notepadpluspluspreparexml.png