Userform Checkbox soll Tabellen ausblenden
#1
Hallo liebe Excel Experten,

nach intensiver Suche komme ich an meine Grenze und bitte euch, mir einen Rat zu geben. In dem Attachment werden Checkboxen in eine Userform geschrieben, die in Tabelle1 in Spalte V stehen.

Die Werte der Checkboxen werden abgespeichert, eine Default-Einstellung über ein "X" in Spalte U ist möglich. Ich möchte nun über die Checkbox die einzelnen Tabellenblätter beim Anklicken auf "visible.xlSheetVeryHidden" setzen. Wenn die Checkbox wieder abgeklickt wird, soll das Tabellenblatt wieder visible.xlSheetVisible" sein.

Klar ist, wenn ich Tabelle1 auswähle, verschwindet auch die Userform, das muss noch optimiert werden.

Jetzt habe ich aber absolut keine Idee, wie ich die dynamischen Checkboxen auswerte und einen Aktionscode if-then-else dazu schreibe.

Mit der klassischen Variante des Codes komme ich ja wohl nicht weiter:

Private Sub CheckBox1_Click()

With Sheets("Cover Sheet")
    If CheckBox1 = True Then
        .Visible = xlSheetVeryHidden
    Else
        .Visible = xlSheetVisible
    End If
End With

End Sub


Könnte mir bitte jemand helfen, auch wenn die grundsätzliche Lösung für viele vielleicht unnütz oder überzogen erscheint.

Viele Grüße
Ralle


Angehängte Dateien
.xlsm   Checkbox soll Tabellenblätter ausblenden.xlsm (Größe: 1,75 MB / Downloads: 4)
Antworten Top
#2
Hallo,

Ausführung erfolgt hier mit Klick auf das Label.

Code:
Private Sub Label1_Click()
  Dim oCheckbox As Object
  For Each oCheckbox In Me.Controls
    If TypeOf oCheckbox Is MSForms.CheckBox Then
      If Left(oCheckbox.Name, 2) = "CB" Then
        If oCheckbox Then
          Worksheets(oCheckbox.Caption).Visible = xlSheetVeryHidden
        Else
          Worksheets(oCheckbox.Caption).Visible = True
        End If
      End If
    End If
  Next oCheckbox
End Sub

Private Sub UserForm_Activate()
  Dim oCB As MSForms.CheckBox
  Dim rng As Range
  Dim intT As Integer, intL As Integer
  Dim lastROW As Long
  lastROW = Worksheets("Tabelle1").Range("V100").End(xlUp).Row
 
  'Beginn linke Kante
  intL = 30
 
  For Each rng In Worksheets("Tabelle1").Range("V1:V" & lastROW)
    Set oCB = Me.Controls.Add("Forms.CheckBox.1")
   
    'Beginn 1. Zeile + Abstand zwischen Checkboxes in der Hšhe
    If intT = 0 Then
        intT = 45
          Else
        intT = intT + 30
    End If
   
    If intT > 320 Then 'wenn hšher als 320, dann Umbruch in neue Spalte
        intT = 45 'Beginn 1. Zeile (nŠchste Spalte)
        intL = intL + 160 'Spaltenabstand
    End If
   
    With oCB
        .Caption = rng.Text
        .Top = intT
        .Left = intL
        .Height = 20
        .Width = 220 'Raum für Textbreite
        .Value = Worksheets(.Caption).Visible > -1
        .Name = "CB" & rng.Row
    End With
  Next
End Sub

Beachte, dass immer mindestens 1 Blatt sichtbar sein/bleiben muss.

Gruß Uwe
Antworten Top
#3
Fantastisch Uwe - ganz herzlichen Dank für die schnelle Hilfe.
Bedanke mich herzlich.

Viele Grüße
Ralle
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste