Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Toggle Butto Status abfrage

Toggle Butto Status abfrage
12.01.2016 09:59:29
Rookie
Hallo liebe VBA-Profies,
ich habe folgendes Problem und ich hoffe ihr könnt mir weiterhelfen:
In meiner Excel-Tabelle habe ich eine Schalfläche integriert über die eine UserForm aufgerufen wird. In dieser UserForm stehen mehrere Toggle-Buttons zum ein- und ausblenden von verschiedenen Spalten zur Verfügung. Das ein- bzw. ausblenden habe ich wie folgt programmiert:
Private Sub cmdSchließen_Click()
Unload frmSchaltflächenM
End Sub
Sub SpaltenAusblenden5()
Sheets("Montage").Activate
Columns("H").EntireColumn.Hidden = True
End Sub Sub SpaltenEinblenden5()
Sheets("Montage").Activate
Columns("H").EntireColumn.Hidden = False
End Sub
Private Sub ToggleButton5_Click()
Dim TB As ToggleButton
Set TB = ToggleButton5
If TB.Value = False Then
TB.Caption = "Projektleiter ein"
Call SpaltenAusblenden5
Else
TB.Caption = "Projektleiter aus"
Call SpaltenEinblenden5
End If
End Sub
Das Ein- und Ausblenden der Spalten funktioniert, mein Problem ist aber folgendes:
Ich rufe über die Schaltfläche die UserForm mit den Toggle-Buttons auf, dann blende ich die Spalten welche ich nicht sehen möchte aus und schließe die UserForm.
So....
Wenn ich die Userform erneut aufrufe, sind alle Toggel-Buttons in Ausgangsstellung (also nicht gedrückt).
Meine Frage ist also:
Ist es Möglich, wenn ich die Userform erneut aufrufe, dass automatisch erkannt wird welche Spalten bereits ein- bzw. ausgeblendet sind und der jeweilege Toggle-Button automatisch dementsprechend geschaltet ist?
z.B.:
1. Spalte H ist ausgeblendet
2. Ich öffne die UserForm
3. Toggle-Button ist aktiviert.
Es wäre auch Toll, wenn nach dem Speichern und wieder Öffnen der Datei erkannt wird, welche Spalten ein- bzw. ausgeblendet sind und je nach dem die Toggle-Buttons in der UserForm geschalten sind.
Für Tipps, Tricks und Beispiele aber auch für andere Vorgehensweisen zu diesem Thema wäre ich sehr dankbar!
Vielen herzlichen Dank im voraus,
Mit besten Grüßen
Stefan

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispieldatei! o.T.
12.01.2016 10:11:37
Sepp
Gruß Sepp

AW: Beispieldatei! o.T.
12.01.2016 10:22:48
Rookie
Hallo Sepp,
danke für die schnelle Antwort, leider kann ich außer dem Kästchen "Gruß Sepp" nichts sehen.
Gruß
Stefan

Anzeige
AW: Beispieldatei! o.T.
12.01.2016 10:35:00
Sepp
Hallo Stefan,
im Betreff steht doch 'Beispieldatei!'
Gruß Sepp

AW: Beispieldatei! o.T.
12.01.2016 10:57:00
Rookie
Oh Sorry,
https://www.herber.de/bbs/user/102736.xlsm
anbei die Datei. Unter der Tabelle "Montage" - Schaltfläche "Anzeige wählen".

Anzeige
AW: Beispieldatei! o.T.
12.01.2016 11:16:59
Daniel
Hi
du kannst die Togglebuttons mit einer Ausgabezelle verknüpfen.
dann wird der Togglebuttonwert in diese Zelle geschreiben und beim Öffnen der Userform nimmt der Togglebutton diesen Wert an.
Der Zellwert wird natürlich wie alle anderen Zellwerte mit gespeichert
dafür legst du dir am besten ein neues Tabellenblatt an (z.B. mit dem Namen Userform_Steuerung)
und schreibst dann die Zelladresse mit Tabellenblattname in die Eigenschaft ControlSource:
ControlSource: 'Userform_Steuerung'!A1
Gruss Daniel

Anzeige
AW: Beispieldatei! o.T.
12.01.2016 11:24:15
Sepp
Hallo Stefan,
Code ohne 'Option Explicit' wird von mir normalerweise ignoriert!
In das Modul des UF.
' **********************************************************************
' Modul: frmSchaltflächenM Typ: Userform
' **********************************************************************


Private Sub cmdSchließen_Click()

Unload frmSchaltflächenM

End Sub

Private Sub CommandButton1_Click()

Dim i As Long, n As Long
n = 1
With Sheets("Montage")
  For i = 5 To .Cells(Rows.Count, "A").End(xlUp).Row
    If .Cells(i, "A") <> "" Then
      .Cells(i, "A") = n
      n = n + 1
    End If
  Next
End With

End Sub

Private Sub ToggleButton5_Click()
With ToggleButton5
  .Caption = IIf(.Value, "Projektleiter aus", "Projektleiter ein")
  Call SpaltenAusEin(8, .Value)
End With
End Sub

Private Sub ToggleButton6_Click()
With ToggleButton6
  .Caption = IIf(.Value, "Meister aus", "Meister ein")
  Call SpaltenAusEin(9, .Value)
End With
End Sub

Private Sub ToggleButton7_Click()
With ToggleButton7
  .Caption = IIf(.Value, "Planstart aus", "Planstart ein")
  Call SpaltenAusEin(10, .Value)
End With
End Sub


Private Sub ToggleButton8_Click()
With ToggleButton8
  .Caption = IIf(.Value, "Planende aus", "Planende ein")
  Call SpaltenAusEin(11, .Value)
End With
End Sub

Private Sub ToggleButton9_Click()
With ToggleButton9
  .Caption = IIf(.Value, "Anmerkung aus", "Anmerkung ein")
  Call SpaltenAusEin(12, .Value)
End With
End Sub

Private Sub ToggleButton10_Click()
With ToggleButton10
  .Caption = IIf(.Value, "Fortschritt aus", "Fortschritt ein")
  Call SpaltenAusEin(15, .Value)
End With
End Sub

Private Sub ToggleButton11_Click()
With ToggleButton11
  .Caption = IIf(.Value, "Reviewtermin aus", "Reviewtermin ein")
  Call SpaltenAusEin(16, .Value)
End With
End Sub

Private Sub ToggleButton12_Click()
With ToggleButton12
  .Caption = IIf(.Value, "Stand aus", "Stand ein")
  Call SpaltenAusEin(17, .Value)
End With
End Sub

Private Sub ToggleButton13_Click()
With ToggleButton13
  .Caption = IIf(.Value, "Durchführbarkeit aus", "Durchführbarkeit ein")
  Call SpaltenAusEin(18, .Value)
End With
End Sub

Private Sub ToggleButton14_Click()
With ToggleButton14
  .Caption = IIf(.Value, "Status aus", "Status ein")
  Call SpaltenAusEin(19, .Value)
End With
End Sub

Private Sub ToggleButton15_Click()
With ToggleButton15
  .Caption = IIf(.Value, "Fortschritt Versch. aus", "Fortschritt Versch. ein")
  Call SpaltenAusEin(20, .Value)
End With
End Sub

Private Sub ToggleButton16_Click()
With ToggleButton16
  .Caption = IIf(.Value, "Ist-Start aus", "Ist-Start ein")
  Call SpaltenAusEin(21, .Value)
End With
End Sub

Private Sub ToggleButton17_Click()
With ToggleButton17
  .Caption = IIf(.Value, "Ist-Ende aus", "Ist-Ende ein")
  Call SpaltenAusEin(22, .Value)
End With
End Sub

Sub SpaltenAusEin(ByVal Spalte As Long, ByVal Hide As Boolean)
Sheets("Montage").Columns(Spalte).EntireColumn.Hidden = Hide
End Sub

Private Sub UserForm_Activate()
With ToggleButton5
  .Value = Sheets("Montage").Columns(8).EntireColumn.Hidden
  .Caption = IIf(.Value, "Projektleiter aus", "Projektleiter ein")
End With

With ToggleButton6
  .Value = Sheets("Montage").Columns(9).EntireColumn.Hidden
  .Caption = IIf(.Value, "Meister aus", "Meister ein")
End With

With ToggleButton7
  .Value = Sheets("Montage").Columns(10).EntireColumn.Hidden
  .Caption = IIf(.Value, "Planstart aus", "Planstart ein")
End With

With ToggleButton8
  .Value = Sheets("Montage").Columns(11).EntireColumn.Hidden
  .Caption = IIf(.Value, "Planende aus", "Planende ein")
End With

With ToggleButton9
  .Value = Sheets("Montage").Columns(12).EntireColumn.Hidden
  .Caption = IIf(.Value, "Anmerkung aus", "Anmerkung ein")
End With

With ToggleButton10
  .Value = Sheets("Montage").Columns(15).EntireColumn.Hidden
  .Caption = IIf(.Value, "Fortschritt aus", "Fortschritt ein")
End With

With ToggleButton11
  .Value = Sheets("Montage").Columns(16).EntireColumn.Hidden
  .Caption = IIf(.Value, "Reviewtermin aus", "Reviewtermin ein")
End With

With ToggleButton12
  .Value = Sheets("Montage").Columns(17).EntireColumn.Hidden
  .Caption = IIf(.Value, "Stand aus", "Stand ein")
End With

With ToggleButton13
  .Value = Sheets("Montage").Columns(18).EntireColumn.Hidden
  .Caption = IIf(.Value, "Durchführbarkeit aus", "Durchführbarkeit ein")
End With

With ToggleButton14
  .Value = Sheets("Montage").Columns(19).EntireColumn.Hidden
  .Caption = IIf(.Value, "Status aus", "Status ein")
End With

With ToggleButton15
  .Value = Sheets("Montage").Columns(20).EntireColumn.Hidden
  .Caption = IIf(.Value, "Fortschritt Versch. aus", "Fortschritt Versch. ein")
End With

With ToggleButton16
  .Value = Sheets("Montage").Columns(21).EntireColumn.Hidden
  .Caption = IIf(.Value, "Ist-Start aus", "Ist-Start ein")
End With

With ToggleButton17
  .Value = Sheets("Montage").Columns(22).EntireColumn.Hidden
  .Caption = IIf(.Value, "Ist-Ende aus", "Ist-Ende ein")
End With

End Sub

Gruß Sepp

Anzeige
AW: Beispieldatei! o.T.
12.01.2016 12:12:27
Rookie
Hallo Sepp,
vielen herzlichen Dank!! Funktioniert perfekt und "Option Explicit" ist jetzt auch wieder drin.
Gruß
Stefan
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Toggle Button Status Abfrage in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Erstelle eine UserForm:

    • Öffne den VBA-Editor (ALT + F11).
    • Füge eine neue UserForm hinzu und platziere mehrere Toggle-Buttons darauf.
  2. Programmiere die Toggle-Buttons:

    • Füge den folgenden Code in das Modul der UserForm ein, um den Status der Toggle-Buttons beim Öffnen zu setzen:
    Private Sub UserForm_Activate()
       With ToggleButton5
           .Value = Sheets("Montage").Columns(8).EntireColumn.Hidden
           .Caption = IIf(.Value, "Projektleiter aus", "Projektleiter ein")
       End With
       ' Wiederhole dies für die anderen Toggle-Buttons
    End Sub
  3. Toggle-Buttons ein- und ausblenden:

    • Verwende die folgenden Subroutinen zum Ein- und Ausblenden von Spalten:
    Sub SpaltenAusblenden5()
       Sheets("Montage").Columns("H").EntireColumn.Hidden = True
    End Sub
    
    Sub SpaltenEinblenden5()
       Sheets("Montage").Columns("H").EntireColumn.Hidden = False
    End Sub
  4. Steuerung des Toggle-Buttons:

    • Der folgende Code schaltet den Toggle-Button und blendet die entsprechende Spalte ein oder aus:
    Private Sub ToggleButton5_Click()
       With ToggleButton5
           .Caption = IIf(.Value, "Projektleiter aus", "Projektleiter ein")
           Call SpaltenAusblenden5
       End With
    End Sub
  5. Speichern und Wiederherstellen des Status:

    • Um den Status der Toggle-Buttons zu speichern, kannst du eine Zelle in einem zusätzlichen Blatt (z.B. "Userform_Steuerung") verwenden. Setze die ControlSource-Eigenschaft des Toggle-Buttons auf die entsprechende Zelle.

Häufige Fehler und Lösungen

  • Problem: Toggle-Buttons sind nach dem Schließen der UserForm nicht in der richtigen Position.

    • Lösung: Stelle sicher, dass der Code in der UserForm_Activate-Subroutine korrekt implementiert ist. Hier kannst du den Status der Spalten auslesen und die Toggle-Buttons entsprechend setzen.
  • Problem: Excel zeigt nicht den richtigen Status in Prozent an.

    • Lösung: Verwende eine zusätzliche Zelle, um den Status zu speichern und diesen Wert beim Öffnen der UserForm wieder auszulesen.

Alternative Methoden

  • Verknüpfung mit Zellen: Du kannst die Toggle-Buttons direkt mit Zellen verknüpfen, indem du die ControlSource-Eigenschaft nutzt. Dies ermöglicht eine automatische Speicherung des Status beim Schließen der UserForm.

  • Verwendung von Checkboxen: Anstelle von Toggle-Buttons kannst du Checkboxen verwenden, die sich ebenfalls gut für ein- und ausblendbare Spalten eignen.


Praktische Beispiele

  • Projektleiter Spalte:

    • Bei einem Toggle-Button, der die Sichtbarkeit der Projektleiter-Spalte steuert, kannst du den Code anpassen, um den Status der Spalte zu speichern und beim nächsten Öffnen der UserForm zu erkennen.
  • Statusanzeige in Prozent:

    • Wenn du den Status der Spalten in Prozent anzeigen möchtest, kannst du eine zusätzliche Funktion hinzufügen, die die Sichtbarkeit der Spalten zählt und in einer Zelle anzeigt.

Tipps für Profis

  • Nutze Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Verwende Enum, um die verschiedenen Toggle-Button-Status klarer zu definieren.
  • Teste deine UserForm regelmäßig, um sicherzustellen, dass alle Funktionen und Statusüberprüfungen korrekt funktionieren.

FAQ: Häufige Fragen

1. Wie kann ich den Status der Toggle-Buttons automatisch speichern? Du kannst den Status der Toggle-Buttons in einem speziellen Arbeitsblatt speichern. Verwende dazu die ControlSource-Eigenschaft.

2. Funktioniert das auch in älteren Excel-Versionen? Ja, die grundlegenden Funktionen von VBA und UserForms sollten in den meisten Excel-Versionen ähnlich funktionieren. Stelle sicher, dass du in einer kompatiblen Version arbeitest.

3. Wie kann ich den Status in Prozent anzeigen? Du kannst eine zusätzliche Zelle verwenden, um den Status der Sichtbarkeit in Prozent darzustellen, basierend auf der Anzahl der sichtbaren und ausgeblendeten Spalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige