RibbonX-Workshop - Sichtbarkeit der Elemente

In diesem Teil wollen wir lernen, wie wir die Sichtbarkeit der Elemente einschränken können

Mit Hilfe der Attribute "getEnabled" und "getVisible" schränken wir die Sichbarkeit ein. Wichtig ist, dass "getEnabled" und "enabled" bzw. "getVisible" und "visible" nicht zusammen genutzt werden dürfen. Es kann immer nur eines der Attribute verwendet werden.


Zuerst das "getEnabled"-Attribut. Damit kann man z.B. das Element in Abhängigkeit zu einem Zellwert aktivieren oder deaktivieren.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad_X1">
  <ribbon>
     <tabs>
       <tab id="tab0" label="User">
         <group id="grp0" label="User-Group">
            <button id="btn0" label="Ein-Aus" getEnabled="getEnabled_Button1" imageMso="Bold" size="large" onAction="onAction_Button1" />
         </group>
     </tab>
     </tabs>
  </ribbon>
</customUI>


Option Private Module
Option Explicit

Public objRibbon As IRibbonUI

Public Sub onLoad_X1(ribbon As IRibbonUI)
     Set objRibbon = ribbon
End Sub

Public Sub onAction_Button1(control As IRibbonControl)
     MsgBox "Button " & control.ID & " gedrückt", 64, "Hinweis"
End Sub

Public Sub getEnabled_Button1(control As IRibbonControl, ByRef returnValue)
     If ThisWorkbook.Sheets("Tabelle4").Range("G8").Value = "Ja" Then returnValue = True
End Sub


Kommen wir zu "getVisible". Damit ist es z.B. möglich, dass das Element nur angezeigt wird, wenn ein bestimmter Benutzer angemeldet ist.

Für ein benutzerdefiniertes Element:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad_X1">
  <ribbon>
     <tabs>
       <tab id="tab0" label="User">
         <group id="grp0" label="User-Group">
            <button id="btn0" label="Ein-Aus" getVisible="getEnabled_Button1" imageMso="Bold" size="large" onAction="onAction_Button1" />
         </group>
     </tab>
     </tabs>
  </ribbon>
</customUI>


Option Private Module
Option Explicit

Public objRibbon As IRibbonUI

Public Sub onLoad_X1(ribbon As IRibbonUI)
     Set objRibbon = ribbon
End Sub

Public Sub onAction_Button1(control As IRibbonControl)
     MsgBox "Button " & control.ID & " gedrückt", 64, "Hinweis"
End Sub

Public Sub getVisible_Button1(control As IRibbonControl, ByRef returnValue)
     If Environ("USERNAME") = "Max Mustermann" Then returnValue = True
End Sub


Deaktvieren von Standardtabs:
Dies verwenden wir wenn wir Standardtabs in Abhängigkeit von Benutzern ein- oder ausblenden wollen. startFromScratch darf in solchen Fällen nicht verwendet werden. Im Beispiel blenden wir das Tab "Start" aus.
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad" >
   <ribbon>
      <tabs>
         <tab idMso="TabHome" getVisible="getVisible_Standardtabs" />
     </tabs>
</ribbon>
</customUI>

Option Private Module
Option Explicit

Public objRibbon As IRibbonUI

Public Sub onLoad(ribbon As IRibbonUI)
 Set objRibbon = ribbon
End Sub

Public Sub getVisible_StandardTabs(control As IRibbonControl, ByRef visible)
 If Environ("USERNAME") = "Mumpel" Then visible = True
End Sub


Sichtbarkeit in Abhängigkeit zu einem anderen Element:

Natürlich kann man Elemente auch in Abhängigkeit zueinander schalten. Auch hier können Sie wählen wo Sie Die Zustände speichern möchten. In den Beispielcodes nutze ich eine Variable vom Typ Boolean

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad_01">
  <ribbon>
    <tabs>
      <tab id="tab0" label="MyTab">
        <group id="grp0" label="MyGroup">
          <button id="btn0" onAction="onAction_01" getEnabled="getEnabled_01" size="large" imageMso="AutoDial" />
          <button id="btn1" onAction="onAction_01" getEnabled="getEnabled_01" size="large" imageMso="FileSaveAs"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>


Option Private Module
Option Explicit

Public objRibbon As IRibbonUI
Public OnOff     As Boolean

Public Sub onLoad_01(ribbon As IRibbonUI)
Set objRibbon = ribbon
End Sub

Public Sub getEnabled_01(control As IRibbonControl, ByRef returnValue)

Select Case control.ID
       Case "btn0"
            If Not OnOff Then returnValue = 1
       Case "btn1"
            If OnOff Then returnValue = 1
End Select


End Sub

Public Sub onAction_01(control As IRibbonControl)

Select Case control.ID
       Case "btn0"
            OnOff = True
       Case "btn1"
            OnOff = False
End Select

objRibbon.Invalidate
End Sub