Forums Neueste Beiträge
 

Word 2007 - Ribbon-Dynamisierung mit XML / VBA

08/03/2008 - 14:23 von Axel | Report spam
Hallo,

ich habe in Word 2007 mittels einer Globalen Dokumentvorlage einen eigenen
Tab in der Multifunktionsleiste erzeugt. Dieser Tab enthàlt eine Gruppe, in
der eine Button-Group mit 5 Button enthalten ist, die je nach Nutzervorgabe
beim Laden der Dokumentvorlage ein- oder ausgeblendet werden sollen.

Leider funktioniert das Ein- oder Ausblenden bisher nur für ALLE Button, die
in der XML-Datei ein "getVisible"-Attribut besitzen, ich möchte aber, dass
man festlegen kann, welche Button zu sehen sind und welche nicht.

Dies ist der XML-Code in der DOTM-Datei, der den Tab in den Ribbon einfügt:

<customUI xmlns="http://schemas.microsoft.com/office...omui"
onLoad="CallbackOnRibbonLoad">
<ribbon startFromScratch="false">
<tabs>
<tab id="MeinTab" label="Test">
<group id="MeineGruppe" label="Testgruppe">
<buttonGroup id="MeineButtonGroup">
<button id="Button1" imageMso="_1" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro1" />

<button id="Button2" imageMso="_2" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro2" />

<button id="Button3" imageMso="_3" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro3" />

<button id="Button4" imageMso="_4" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro4" />

<button id="Button5" imageMso="_5" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro5" />
</buttonGroup>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Und das sind die Subs im "Modul1" der DOTM-Datei:

Public gobjRibbon As IRibbonUI
Public gbooRibbonButtonAnzeigen As Boolean

'Globale Variable gobjRibbon beim Laden von TEST.DOTM initialisieren:
Public Sub CallbackOnRibbonLoad(ribbon As IRibbonUI)
Set gobjRibbon = ribbon
gbooRibbonButtonAnzeigen = False 'Alle Button ausblenden
End Sub

'Button des Tabs "Test" anzeigen/nicht anzeigen:
Public Sub CallbackGetVisible(control As IRibbonControl, ByRef visible As
Variant)
visible = gbooRibbonButtonAnzeigen
End Sub

'Makro bei Klick auf Ribbon-Button ausführen:
Public Sub CallbackOnAction(objButton As IRibbonControl)
Application.Run objButton.Tag
End Sub

Public Sub AutoExec()
Dim astrAlleMakros(5) As String
Dim intI As Integer, strX As String

astrAlleMakros(1) = "Button1"
astrAlleMakros(2) = "Button2"
astrAlleMakros(3) = "Button3"
astrAlleMakros(4) = "Button4"
astrAlleMakros(5) = "Button5"

gbooRibbonButtonAnzeigen = True
strX = "10101" 'Angezeigt werden sollen nur "Button1", "Button3" und
"Button5"
For intI = 1 To 5
If Mid(strX, intI, 1) = "1" Then gobjRibbon.InvalidateControl
astrAlleMakros(intI)
Next intI
End Sub

Nach dem Laden von TEST.DOTM sollen eigentlich nur die Button "Button1",
"Button3" und "Button5" zu sehen sein, es werden aber alle 5 Button
angezeigt.

Ich habe nun schon einige Tage experimentiert und gesucht, aber leider keine
Lösung gefunden. Das Dumme ist, dass bei allen Erlàuterungen und Beispielen,
die ich gefunden habe, immer nur von der Änderung EINES Ribbon-Elements zur
Laufzeit ausgegangen wird. Wie man aber mehrere Elemente in
unterschiedlicher Weise (sichtbar/unsichtbar) àndert, wird nirgends erklàrt.

In der Word 2007 - VBA-Hilfe geistert noch eine "Refresh"-Methode für das
IRibbonUI-Objekt herum (wahrscheinlich noch ein Relikt der Betaversion von
Office 2007), die aber in der aktuellen Version nicht mehr im Objektmodell
enthalten ist. Ich glaube mittlerweile, dass diese Methode etwas voreilig
entfernt wurde.

Wàre super, wenn jemand helfen könnte!

Vielen Dank schonmal
Axel
 

Lesen sie die antworten

#1 Udo
11/03/2008 - 11:09 | Warnen spam
Hallo,

ich versteh dein Problem nicht, nicht deiner CallBackRoutine
"CallbackGetVisible" wird doch abgefragt, ob der Button sichtbar sein soll
oder nicht.

Also welche Buttons willst du denn nun noch aus und einblenden?


Gruß


Udo


"Axel" schrieb im Newsbeitrag
news:fqu3vp$ous$03$
Hallo,

ich habe in Word 2007 mittels einer Globalen Dokumentvorlage einen eigenen
Tab in der Multifunktionsleiste erzeugt. Dieser Tab enthàlt eine Gruppe,
in der eine Button-Group mit 5 Button enthalten ist, die je nach
Nutzervorgabe beim Laden der Dokumentvorlage ein- oder ausgeblendet werden
sollen.

Leider funktioniert das Ein- oder Ausblenden bisher nur für ALLE Button,
die in der XML-Datei ein "getVisible"-Attribut besitzen, ich möchte aber,
dass man festlegen kann, welche Button zu sehen sind und welche nicht.

Dies ist der XML-Code in der DOTM-Datei, der den Tab in den Ribbon
einfügt:

<customUI xmlns="http://schemas.microsoft.com/office...omui"
onLoad="CallbackOnRibbonLoad">
<ribbon startFromScratch="false">
<tabs>
<tab id="MeinTab" label="Test">
<group id="MeineGruppe" label="Testgruppe">
<buttonGroup id="MeineButtonGroup">
<button id="Button1" imageMso="_1" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro1" />

<button id="Button2" imageMso="_2" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro2" />

<button id="Button3" imageMso="_3" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro3" />

<button id="Button4" imageMso="_4" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro4" />

<button id="Button5" imageMso="_5" onAction="CallbackOnAction"
getVisible="CallbackGetVisible" tag="Makro5" />
</buttonGroup>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Und das sind die Subs im "Modul1" der DOTM-Datei:

Public gobjRibbon As IRibbonUI
Public gbooRibbonButtonAnzeigen As Boolean

'Globale Variable gobjRibbon beim Laden von TEST.DOTM initialisieren:
Public Sub CallbackOnRibbonLoad(ribbon As IRibbonUI)
Set gobjRibbon = ribbon
gbooRibbonButtonAnzeigen = False 'Alle Button ausblenden
End Sub

'Button des Tabs "Test" anzeigen/nicht anzeigen:
Public Sub CallbackGetVisible(control As IRibbonControl, ByRef visible As
Variant)
visible = gbooRibbonButtonAnzeigen
End Sub

'Makro bei Klick auf Ribbon-Button ausführen:
Public Sub CallbackOnAction(objButton As IRibbonControl)
Application.Run objButton.Tag
End Sub

Public Sub AutoExec()
Dim astrAlleMakros(5) As String
Dim intI As Integer, strX As String

astrAlleMakros(1) = "Button1"
astrAlleMakros(2) = "Button2"
astrAlleMakros(3) = "Button3"
astrAlleMakros(4) = "Button4"
astrAlleMakros(5) = "Button5"

gbooRibbonButtonAnzeigen = True
strX = "10101" 'Angezeigt werden sollen nur "Button1", "Button3" und
"Button5"
For intI = 1 To 5
If Mid(strX, intI, 1) = "1" Then gobjRibbon.InvalidateControl
astrAlleMakros(intI)
Next intI
End Sub

Nach dem Laden von TEST.DOTM sollen eigentlich nur die Button "Button1",
"Button3" und "Button5" zu sehen sein, es werden aber alle 5 Button
angezeigt.

Ich habe nun schon einige Tage experimentiert und gesucht, aber leider
keine Lösung gefunden. Das Dumme ist, dass bei allen Erlàuterungen und
Beispielen, die ich gefunden habe, immer nur von der Änderung EINES
Ribbon-Elements zur Laufzeit ausgegangen wird. Wie man aber mehrere
Elemente in unterschiedlicher Weise (sichtbar/unsichtbar) àndert, wird
nirgends erklàrt.

In der Word 2007 - VBA-Hilfe geistert noch eine "Refresh"-Methode für das
IRibbonUI-Objekt herum (wahrscheinlich noch ein Relikt der Betaversion von
Office 2007), die aber in der aktuellen Version nicht mehr im Objektmodell
enthalten ist. Ich glaube mittlerweile, dass diese Methode etwas voreilig
entfernt wurde.

Wàre super, wenn jemand helfen könnte!

Vielen Dank schonmal
Axel

Ähnliche fragen