Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ToggleButton
BildScreenshot zu ToggleButton ToggleButton-Seite mit Beispielarbeitsmappe aufrufen

Umschaltfunktion in eigenem Commandbar?!

Betrifft: Umschaltfunktion in eigenem Commandbar?! von: Andreas Hanisch
Geschrieben am: 14.05.2008 11:43:59

Hallo Herber Fans,

nachdem ich es gestern hinbekommen habe, ein Sub Menü in einem eigenen Commandbar zu generieren erschloß sich mir der Gedanken, ob es möglich ist, eine Art „Umschalt- bzw. Toggle“ Funktion in einem Commandbar zu integrieren?
Ich nehme an, alle die sich mit VBA beschäftigen, haben schon beobachtet, daß in der Symbolleiste „Visual Basic“ der Button für den Entwurfsmodus orange hinterlegt wird, wenn der Entwurfsmodus aktiviert wurde. Diese farbliche Hinterlegung verschwindet dann auch wieder bei Deaktivierung. Auch beim Menüpfad Daten/ Filter/ AutoFilter ist das möglich. Dort erscheint neben dem Wort AutoFilter bei Aktivierung des Gleichen auch ein Haken, der bei Deaktivierung wieder verschwindet.

Ist eine derartige, vergleichbare (Toggle-) Funktionalität auch für einen selbst kreierten Commandbar möglich? Ich habe in der F1 Hilfe und auch hier im Herber Forum schon nach sehr konkreten Stichworten wie bspw. „controls.add“ gesucht, um konkrete Code- Ideen zu bekommen. Aber bisher ohne Erfolg.

Ich würde mich freuen, wenn jemand von Euch aus dem Forum mir eine Anregung geben kann, mit welchem VBA Code/ Konstrukt dieses realisierbar ist.

https://www.herber.de/bbs/user/52341.xls

Vielen Dank und Grüße,

Andreas Hanisch

  

Betrifft: Siehe http://www.excel-addins.de/addins12.htm von: NoNet
Geschrieben am: 14.05.2008 11:52:50

Hallo Hanses,

Bernd Augustin hat auf seiner Webseite ein tolles Beispiel für die Erstellung einer Commandbar/Menüleiste mit unterschiedlichen Elementen per VBA.

http://www.excel-addins.de/addins12.htm

Es lohnt sich auf jeden Fall, dieses Musterbeispiel herunterzladen und den VBA-Code anzuschauen.

Viel Spaß und Erfolg, NoNet


  

Betrifft: Kleine Anmerkung zu Togglebutton von: Renee
Geschrieben am: 14.05.2008 12:19:35

Hi beide,

Das Beispiel zeigt sicher schön die verschiedenen Möglichkeiten. Bei einem Togglbutton würde ich aber Bernd's Vorschlag so korrigieren:

Sub Ein_Aus()
    If CommandBars.ActionControl.State Then
        CommandBars.ActionControl.FaceId = 342
        CommandBars.ActionControl.TooltipText = "Es ist ausgeschaltet!"
    Else
        CommandBars.ActionControl.FaceId = 352
        CommandBars.ActionControl.TooltipText = "Es ist eingeschaltet!"
    End If
    CommandBars.ActionControl.State = Not (CommandBars.ActionControl.State)
End Sub


Das hat den Vorteil, das mit einer direkten Referenzierung des gedrückten Buttons gearbeitet wird!

GreetZ Renée


  

Betrifft: AW: Kleine Anmerkung zu Togglebutton von: Andreas Hanisch
Geschrieben am: 14.05.2008 16:10:56

Hi NoNet und Hallo Renée,

das ist ja mal ein geniales Beispiel, was an benutzerdefinierten Menüs über VBA so alles möglich ist. Ich habe mir den Code angesehen und in das bestehende Gerüst, was ich hatte, integriert. Ein paar kleine Fragen sind leider noch geblieben.
Ich habe den Toggle Button einmal in ein Sub Menü gepackt und einmal so wie in dem Beispiel. Im Commandbar direkt färbt sich der Button durchgängig ein. Im Submenü färbt sich nur der Bereich unter dem geänderten Lämpchen. Im Code für die Kreierung des Sub Menüs habe ich ein bißchen mit den Objekten experimentier, die von .controls.Add hinzugefügt werden. Da hatte ich aber zum Teil Typenunverträglichkeiten. Vom Layout her sieht das Sub Menü anders aus als ein Button im Commandbar, von daher nehme ich an, es ist für ein SubMenü nicht vorgesehen. Oder hättet ihr eine Lösung, das Sub Menü komplett durchzufärben.
Leider funktioniert auch der ToolTipText im SubMenü nicht korrekt. Auch da konnte ich keine Lösung herbeiführen. Habe versucht im Ein_Aus Code Commandbars.ActionControl gegen CommandBarPopUp auszutauschen – ohne Erfolg.

Das sind die Feinheiten bezüglich des Toggle Buttons im Commandbar/ Menü. Jetzt geht es zum Sinn eines solchen Buttons. Ich habe ein Makro, welches in Pivot Tabellen die Fensterfixierung überprüft und immer neu ausrichtet. FensterFixierungen in Pivottabellen bleiben meiner Erfahrung nach nicht lange an der korrekten Stelle. Deswegen diese Makro. Dieses läuft im Hintergrund im VBA Objekt Tabelle2 auf dem Event Ereignis „PivotTableUpdate“. Wenn ich nun auf den Commandbutton drücke und diesen somit aktiviere, erst dann soll die PivotUeberwachung „scharf“ geschaltet sein. Ich wollte es über eine globale Variable vom Typ Long steuern, die nach der Zeile „CommandBars.ActionControl.TooltipText = "Es ist eingeschaltet!"“ (Modul: Ein_Aus) auf 1 setze und das Makro zur Überwachung (Modul: Ueberwachung) erst nach einer IF Abfrage starte.

Aber in allen Varianten, in denen ich es probiert habe, hat es nicht funktioniert. Die Pivotüberwachung ist immer aktiv. Woran liegt es, daß der ToggleButton seinen Zweck noch nicht ganz erfüllt?

Wißt ihr, wie dieser Button zu seinem vollen Zweck verholfen werden kann? Wo ist der Denkfehler? Ich hatte schon einen ähnlichen Thread hier gefunden und verfolgt, aber der ist leider ohne Ergebnis beendet worden.

https://www.herber.de/bbs/user/52349.xls


Vielen, vielen Dank und Grüße,

Andreas Hanisch


  

Betrifft: AW: Kleine Anmerkung zu Togglebutton von: Reinhard
Geschrieben am: 14.05.2008 16:32:43

Hi Andreas,

Sub Ein_Aus_2()
    If CommandBars.ActionControl.State Then
        CommandBars.ActionControl.FaceId = 342
        CommandBars.ActionControl.TooltipText = "Es ist ausgeschaltet!"
        PivotUeberwachung = 0
    Else
        CommandBars.ActionControl.FaceId = 352
        CommandBars.ActionControl.TooltipText = "Es ist eingeschaltet!"
        PivotUeberwachung = 1
    End If
    CommandBars.ActionControl.State = Not (CommandBars.ActionControl.State)
End Sub



Gruß
Reinhard


  

Betrifft: AW: Kleine Anmerkung zu Togglebutton von: Renee
Geschrieben am: 14.05.2008 16:35:19

Hi Andreas,

In Submenüs sehe Buttons leicht anders aus (kein Rahmen, dafür blauer Select Balken) und sie verlieren die Tooltip-Eigenschaft. Dafür könntest du mit der .Caption Eigenschaft arbeiten.
Z.B. so:

Sub Ein_Aus_3()
    If CommandBars.ActionControl.State Then
        CommandBars.ActionControl.FaceId = 342
        CommandBars.ActionControl.Caption = "Pivot Ueberwachung (AN)"
        PivotUeberwachung = 0
    Else
        CommandBars.ActionControl.FaceId = 352
        CommandBars.ActionControl.Caption = "Pivot Ueberwachung (AUS)"
        PivotUeberwachung = 1
    End If
    CommandBars.ActionControl.State = Not (CommandBars.ActionControl.State)
End Sub


GreetZ Renée