Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Userform Checkbox ein/ausblenden

Userform Checkbox ein/ausblenden
18.07.2013 15:18:38
kultnoob
Hallo zusammen,
im Grunde ist meine Frage eigentlich ganz simple für euch doch stellt sich mein Hirn gerade ein wenig quer.
Ich habe eine Userform in welcher ein Textfeld und 7 CheckBox(en) sind (vorerst). Nun ist mein Ziel, auf Basis des Wertes aus dem Textfeld eine der 7 Checkboxes anzuklicken. Jeder Checkbox ist ein Bereich (per Überschrift) zugeordnet. Der Wert im Textfeld wird aus einer Zelle genommen. Das passt soweit auch.
Im Beispiel:
Textbox1 enthält: Teil A
Checkbox1: von Bereich A
Checkbox2: von Bereich B
.
.
.
Checkbox7: von Bereich G
Ich versuche nun die ganze Zeit schon einen Code zu schreiben der eigentlich nur sagt, wenn eine Checkbox ausgewählt wird, blende alle anderen aus. Nehme ich den Hacken wieder raus, dann lass alle Checkbox(en) wieder erscheinen.
Mit Visible = False/True klappt das teilweise auch mehr oder weniger aber dann wäre ja dieser Codeteil sehr lang da ich ja jede Bedingung durchspielen müsste. Kann man das nicht so wie eine If-Anweisung lösen? Wenn dann bla bla?
Muss ich diesen Code dann in der Userform hinterlegen? Oder hinter den einzelnen Checkbox(en)?
Hinterlege ich diesen "hinter" die Userform, geht mal gar nichts...
Hinterlege ich diesen "hinter die Checkbox, dann gehts. Aber dann hätte ich ja mind. 8 Subs. Und da kommen noch ein paar hinzu. Und mit ein paar meine ich noch 24 Textfelder á 7 Checkbox(en).
Warum ich das ganze mache? Im Grunde werden mir max. 25 Teile angezeigt die dann einzeln per Checkbox sortiert werden. Danach werden diese später erneut in Excel sortiert aufgelistet auf die einzelnen Bereich und daraus entsteht dann ein Diagramm. Natürlich sollte nun die Frage kommen, warum nicht einfach händisch oder per Formel. Nun da sich die Teile ändern. Und um dies nicht immer im Code abzuändern bzw. bei den Formeln, soll alles in einer Userform ausgegeben werden und da kann man dann sicher sortieren, dass nichts verloren geht.
Primär geht es mir nur um eine Möglichkeit, den Code einfach und kurz zu halten.

Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Checkbox ein/ausblenden
18.07.2013 15:25:18
Hajo_Zi
Checkbox1.Visible=Textbox1="Teil A"
Checkbox2.Visible=Textbox1="Teil B"

AW: Userform Checkbox ein/ausblenden
18.07.2013 15:29:18
kultnoob
Hi,
habe ich mich falsch ausgedrückt. Im Textfeld kann alles drinstehen. Gurke, Tomate, Stein, Dreck, Auto. Ich muss es dann nur einem Bereich zuteilen.
In Deinem Beispiel gehst Du davon aus, dass im Textfeld1 immer Teil A steht. Leider nein...

Anzeige
AW: Userform Checkbox ein/ausblenden
18.07.2013 15:32:30
Hajo_Zi
ich bin davon ausgegangen das die Boxen nach dem Inhalt ein und ausgeblendet werden sollen. Bereiche werden da nicht eingegeben. Dann habe ich das wohl falsch interpretiert.
Gruß Hajo

AW: Userform Checkbox ein/ausblenden
18.07.2013 15:38:57
kultnoob
Ich könnte es auch per Dropdown in der Excelliste machen.
Irgendetwas - Menge 5 - Bereich B
Irgendetwas - Menge 3 - Bereich G
Irgendetwas - Menge 1 - Bereich A
.
.
.
usw...

Anzeige
AW: Userform Checkbox ein/ausblenden
18.07.2013 15:54:34
Rudi
Hallo,
Aber dann hätte ich ja mind. 8 Subs.
Na und?
Private Sub CheckBox1_Click()
HideChkBx CheckBox1
End Sub
Private Sub CheckBox2_Click()
HideChkBx CheckBox2
End Sub
Private Sub CheckBox3_Click()
HideChkBx CheckBox3
End Sub
'etc.
Sub HideChkBx(dieBox As Object)
Dim i As Integer
For i = 1 To 8
If i  CInt(Mid(dieBox.Name, 9)) Then
UserForm1.Controls("CheckBox" & i).Visible = Not dieBox
End If
Next
End Sub

Gruß
Rudi

Anzeige
AW: Userform Checkbox ein/ausblenden
18.07.2013 16:43:55
fcs
Hallo kultnoob,
Checkboxen sind hier wohl der falsche Ansatz. Wenn du immer nur eine Checkbox wählen willst, dann wären 8 oder neun Optionsschaltflächen in einem Frame je Textbox der korrektere Ansatz.
Ich würde hier komplett auf Checkboxen verzichten und zu jeder Textbox eine Listbox oder eine Combobox für die Auswahl des zugehörigen Bereiches im Userform plazieren.
Gruß
Franz

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 07:10:55
kultnoob
Morgen zusammen,
vielen Dank für den Ansatz. Die Idee mit der Combobox (hoffe damit ist das Kombinationsfeld gemeint) kam mir gestern auch schon. Mit dieser Variante habe ich aber absolut keinen Plan wie ich das befülle. Aber ich bin ja lernfähig... :D
Im Grunde ist es auch die bessere Möglichkeit. Man hat seinen "Teil XY" und ordnet es einem Bereich zu. Nichts ausblenden oder ähnliches. Lasst mich mal versuchen, dass hinzubekommen.
Muss man ja irgendwie deklarieren können. Und dann muss ich nur ncoh einen Weg finden, den gewählten Bereich zu definieren und diesen geordnet dann in eine Exceldatei auszugeben.

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 07:45:37
kultnoob
Hi,
Ok, die Eingabe der einzelnen Bereich geschieht über .additem
Code:

Sub Comboaction
With Teil_Auswahl.ComboBox1
.AddItem "Bereich0", 0
.AddItem "Bereich1", 1
.AddItem "Bereich2", 2
.AddItem "Bereich3", 3
.AddItem "Bereich4", 4
.AddItem "Bereich5", 5
.AddItem "Bereich6", 6
End With
End Sub
Ich starte die Userform über ein in Excelbutton in welchem ein Makro hinterlegt ist. Das funktioniert glaub auch zum Teil. ABER... Wenn ich die Combobox bzw. den Pfeil zur Auswahl anklicke, dann erscheint mir zwar auf den ersten Blick alles aber sobald ich einen Bereich anklicke, wählt es einen anderen und dann erscheint in der Combobox alles 3 mal. Also Bereich 1 - 6, dann erneut 1 - 6 und nochmal. Warum das denn?

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 08:11:27
fcs
Hi,
dein Makro darfs du nur einmal für jede Combobox starten und zwar in der
Usern_Initialize-Ereignis-Prozdur des Userforms.
In der Summe wird es aber einfacher, wenn du in einem separaten Tabellenblatt der Datei in einer Spalte die Auswahlliste für die Bereiche eingibst. Für die Zellen mit der Auswahlliste legst du dann einen Namen fest.
Im Userform-Editor trägst du dann unter der Eigenschaft "RowSource" der Comboboxen den entsprechenden Namen ein. Das ist auch insgesamt pflegeleichter, wenn du Auswahlliste anpassen willst.
Gruß
Franz

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 10:59:31
kultnoob
Hi,
ja, das habe ich schon gelesen. Wie und wo das geht müsste ich hinbekommen. Um eine Mehrauswahl zu verhinden, habe ich vor dem ersten AddItem ein Clear gesetzt. Dann geht es, doch versuche ich gerade eine Möglichkeit, auch hier im Forum gefunden
https://www.herber.de/forum/archiv/272to276/273392_mehrere_Comboboxen_fuellen.html
wie ich jede einzelne Befüllung der Comboboxen im Code umgehen kann. Aber ich kriegs nicht hin. Ich werde dies mal mit einer Range in einem seperaten Sheet machen. Ein Anpassung sollte eigentlich sehr sehr selten vorkkommen. Aber man kann ja nie wissen.
Ach ich hätte da noch tausend Fragen doch will ich nicht alles vorgekaut bekommen. Außer ich komm echt nicht weiter. Ich teste nun die Range in einem anderen Sheet...

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 13:33:49
kultnoob
Hi,
also die Comboboxen sind nun befüllt und das passt soweit.
Das nächste Ziel ist nun folgendes. Schau ob in 1 ein Wert steht und übernehme ihn in das erste Textfeld oder lass das Textfeld und die Combobox ausblenden. Ich will das Ganze in einer Schleife machen doch krieg ich es nicht hin, die Combobox anzusprechen. Mein bisheriger Code sieht so aus:
lrow2 = Sheets(2).UsedRange.Rows.Count
For i = 22 To lrow2 'Ab dort werden die Werte eingetragen
For a = 1 To 7 'Bisher sind 7 Comboboxen vorhanden
If .Cells(i, 1).Value  Empty Then Userform.controls("TextBox" & a).Value = _
.Range(i,1).Value Else:
Userform.controls("ComboBox" & a).Visible = False
Userform.controls("TextBox" & a).Visible = False
Exit For
Next a
Next i
Er soll halt zuerst schauen, ist die Zelle nicht leer, dann übertrage den Zelleninhalt. Falls leer, dann blende Textfeld und Combobox aus. Bisher hängt es an diesem Codesegment:
Userform.controls("TextBox" & a).Value = .Range(i, 1).Value

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 14:09:08
Rudi
Hallo,
mangelhafte Referenzierung. Du kannst nicht einfach ohne With-Rahmen einen . vor Range setzen.
Userform.controls("TextBox" & a).Value = Sheets(2).Range(i, 1).Value
Gruß
Rudi

AW: Userform Checkbox ein/ausblenden
19.07.2013 14:56:28
kultnoob
Hi Rudi,
mein Fehler. Habe nur einen Teil des Codes gezeigt. Anbei der komplette Code...
Private Sub UserForm()
Userform.Show
'Der Auswertungsdatei den Namen Grafik zuweisen
Grafik = ActiveWorkbook.Name
With Workbooks(Grafik).Sheets(2)
lrow2 = Sheets(2).UsedRange.Rows.Count
For i = 22 To lrow2 'Ab dort werden die Werte eingetragen
For a = 1 To 7 'Bisher sind 7 Comboboxen vorhanden
If .Cells(i, 1).Value  Empty Then Userform.controls("TextBox" & a).Value = _
.Range(i, 1).Value _
Else:
Userform.controls("ComboBox" & a).Visible = False
Userform.controls("TextBox" & a).Visible = False
Exit For
Next a
Exit For
Next i
End With
End Sub
Im Grunde beziehe ich mich ja auf sheet(2) durch die With...
Leider meckert er immer noch... Fehlermeldung beim Codefragment
Userform.controls("TextBox" & a).Value = Sheets(2).Range(i, 1).Value _
Else:
Laufzeitfehler '1004'
Anwendungs- oder objektdefinierter Fehler
Ich bin das nun ein paar mal durchgegangen aber ich finde den Fehler nicht. Sehr Ihr einen Fehler?

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 14:58:53
kultnoob
Hi Rudi,
mein Fehler. Habe nur einen Teil des Codes gezeigt. Anbei der komplette Code...
Private Sub UserForm()
Userform.Show
'Der Auswertungsdatei den Namen Grafik zuweisen
Grafik = ActiveWorkbook.Name
With Workbooks(Grafik).Sheets(2)
lrow2 = Sheets(2).UsedRange.Rows.Count
For i = 22 To lrow2 'Ab dort werden die Werte eingetragen
For a = 1 To 7 'Bisher sind 7 Comboboxen vorhanden
If .Cells(i, 1).Value  Empty Then Userform.controls("TextBox" & a).Value = _
.Range(i, 1).Value _
Else:
Userform.controls("ComboBox" & a).Visible = False
Userform.controls("TextBox" & a).Visible = False
Exit For
Next a
Exit For
Next i
End With
End Sub
Im Grunde beziehe ich mich ja auf sheet(2) durch die With...
Leider meckert er immer noch... Fehlermeldung beim Codefragment
Userform.controls("TextBox" & a).Value = Sheets(2).Range(i, 1).Value _
Else:
Laufzeitfehler '1004'
Anwendungs- oder objektdefinierter Fehler
Ich bin das nun ein paar mal durchgegangen aber ich finde den Fehler nicht. Sehr Ihr einen Fehler?

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 16:31:42
fcs
Hallo Rudi,
du musst Cells statt Range verwwwenden!
Die Zeile
Userform.Show
gehört an das Ende der Prozedur, wenn du vor der Anzeige des Userforms Werte in die Textboxen einlesen willst.
Ich meine es müsste etwa wie folgt aussehen, wobei ich wegen besserer Übersicht die If-Konstrukten in mehrere Zeilen aufgelöst habe.
Gruß
Franz
Private Sub UserForm_anzeigen()
Dim Grafik, i, a, lrow2
'Der Auswertungsdatei den Namen Grafik zuweisen
Grafik = ActiveWorkbook.Name
With Workbooks(Grafik).Sheets(2)
With .UsedRange
lrow2 = .Row + .Rows.Count - 1
End With
a = 1
For i = 22 To lrow2 'Ab dort werden die Werte eingetragen
If .Cells(i, 1).Value  Empty Then
UserForm.Controls("TextBox" & a).Value = .Cells(i, 1).Value
Else
UserForm.Controls("ComboBox" & a).Visible = False
UserForm.Controls("TextBox" & a).Visible = False
End If
a = a + 1
If a > 7 Then Exit For
Next i
End With
UserForm.Show
End Sub

Anzeige
AW: Userform Checkbox ein/ausblenden
22.07.2013 07:14:18
kultnoob
Guten Morgen,
ES FUNKTIONIERT!!!! Vielen Dank.
Gut, wenn ich Sachen in eine Textbox/oä einlesen möchte, dann muss ich zuerst alles durchgehen und dann die Userform anzeigen lassen. Interessant und gespeichert. Ich bin mal so frei und stelle eine Frage.
Den Code an sich verstehe ich bis auf die Zeile:

With UsedRange
lrow2 = .row + .rows.count -1
Mit lrow2 definiere ich bei mir die letzte genutzte Zeile. Standardmäßig mit dem Befehl:
lrow2 = Sheets(2).UsedRange.Rows.Count
Ahhh, im Grunde ist es das Gleiche wie ich nutze. Du benutzt ein With mit UsedRange und beziehst Dich dann wie ich auf die letzte genutzte Zeile. Aber warum dann nochmal + eine Zeile?
MfG

Anzeige
AW: Userform Checkbox ein/ausblenden
22.07.2013 11:11:49
fcs
Hallöchen,
deine Lösung liefert nur dann die korrekte Zeile, wenn in Zeile 1 Daten/Formatierungen stehen.
Sind eine oder mehrere Zeilen am Beginn der Tabelle nicht benutzt, dann liefert
lRow2 = .UsedRange.Rows.Count
nicht die Nummer der letzten benutzten Zeile, sondern eine entsprechend niedrigere Nummer.
Dieses Problem umgeht meine Lösung.
Die Start-/Auswahlwerte für Steuerelemente eines Userforms kann man übrigens auch im Code des Userforms in der Ereignisprozedur
Private Sub UserForm_Initialize()
End Sub

setzen.
Gruß
Franz
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Userform Checkbox ein/ausblenden in Excel


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Öffne Excel und gehe in den VBA-Editor (Alt + F11). Erstelle eine neue Userform und füge ein Textfeld (TextBox) sowie mehrere CheckBoxen hinzu.

  2. CheckBoxen benennen: Benenne die CheckBoxen entsprechend ihren Bereichen, z.B. CheckBox1 für Bereich A, CheckBox2 für Bereich B usw.

  3. Code für das Ausblenden der CheckBoxen: Verwende den folgenden VBA-Code, um die Sichtbarkeit der CheckBoxen zu steuern. Dieser Code sollte in die Userform eingefügt werden:

    Private Sub TextBox1_Change()
       Dim i As Integer
       For i = 1 To 7
           If TextBox1.Value = "Teil " & Chr(64 + i) Then
               Controls("CheckBox" & i).Visible = True
           Else
               Controls("CheckBox" & i).Visible = False
           End If
       Next i
    End Sub
  4. Checkbox-Logik implementieren: Füge für jede CheckBox einen Click-Event-Handler hinzu, um alle anderen CheckBoxen auszublenden, wenn eine ausgewählt wird:

    Private Sub CheckBox1_Click()
       HideChkBx CheckBox1
    End Sub
    ' Weitere Click-Events für andere CheckBoxen
  5. Die HideChkBx Sub-Prozedur: Implementiere die Funktion, die die Sichtbarkeit der CheckBoxen steuert:

    Sub HideChkBx(dieBox As Object)
       Dim i As Integer
       For i = 1 To 7
           If i <> CInt(Mid(dieBox.Name, 9)) Then
               UserForm1.Controls("CheckBox" & i).Visible = Not dieBox.Value
           End If
       Next
    End Sub

Häufige Fehler und Lösungen

  • Checkbox bleibt leer: Wenn eine CheckBox leer bleibt, stelle sicher, dass das Textfeld den richtigen Wert enthält und die Bedingung im Code korrekt formuliert ist.

  • Laufzeitfehler '1004': Dieser Fehler tritt häufig auf, wenn du versuchst, auf ein nicht existierendes Steuerelement zuzugreifen. Stelle sicher, dass die Namen der Controls in deinem Code mit den tatsächlichen Namen in der Userform übereinstimmen.

  • Checkboxen werden nicht korrekt angezeigt: Überprüfe die Sichtbarkeit der CheckBoxen in der Logik des TextBox1_Change-Events. Manchmal kann es hilfreich sein, die Sichtbarkeit zu initialisieren, wenn die Userform geladen wird.


Alternative Methoden

Wenn du nur eine Auswahl zulassen möchtest, ist es ratsam, anstelle von CheckBoxen Optionsschaltflächen zu verwenden. Diese bieten eine einfachere Möglichkeit, eine einzelne Auswahl unter mehreren Optionen zu treffen.

  • Excel Dropdown (ComboBox): Du kannst auch eine ComboBox verwenden, um die Auswahl zu erleichtern. Fülle die ComboBox mit den verfügbaren Bereichen und lasse die Auswahl die Sichtbarkeit der entsprechenden TextBoxen steuern.

    Private Sub UserForm_Initialize()
       With ComboBox1
           .AddItem "Bereich A"
           .AddItem "Bereich B"
           .AddItem "Bereich C"
       End With
    End Sub

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du mit einer ComboBox in einer Userform arbeiten kannst:

Private Sub ComboBox1_Change()
    Select Case ComboBox1.Value
        Case "Bereich A"
            TextBox1.Visible = True
            CheckBox1.Visible = True
        Case "Bereich B"
            TextBox1.Visible = True
            CheckBox2.Visible = True
        Case Else
            TextBox1.Visible = False
            CheckBox1.Visible = False
            CheckBox2.Visible = False
    End Select
End Sub

Tipps für Profis

  • Namen von Steuerelementen: Achte darauf, die Steuerelemente klar und konsistent zu benennen. Das erleichtert die Wartung des Codes.

  • VBA Userform Debugging: Nutze Haltepunkte im VBA-Editor, um den Code Schritt für Schritt zu durchlaufen und Probleme schnell zu identifizieren.

  • Verwendung von Arrays: Anstatt für jede CheckBox separate Codezeilen zu schreiben, kannst du Arrays nutzen, um den Code zu vereinfachen und lesbarer zu machen.


FAQ: Häufige Fragen

1. Wie kann ich eine ComboBox in einer Userform befüllen?
Verwende die AddItem-Methode in der UserForm_Initialize-Prozedur, um die verfügbaren Optionen hinzuzufügen.

2. Warum funktioniert mein CheckBox-Code nicht?
Überprüfe die Benennung der CheckBoxen und stelle sicher, dass die Event-Handler korrekt zugeordnet sind. Achte auch auf die Sichtbarkeit der Steuerelemente.

3. Was ist der Unterschied zwischen CheckBox und Option Button?
Eine CheckBox erlaubt mehrere Auswahlmöglichkeiten, während ein Option Button nur eine Auswahl aus einer Gruppe zulässt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige