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

Forumthread: Abfrage von Checkboxen in Userform

Abfrage von Checkboxen in Userform
25.09.2014 20:13:25
Checkboxen
Hallo!
Ich habe da folgendes Problem:
Ich hab eine Userform mit 12 Checkboxen (für jedes Monat eine), angeordnet sind sie so: Jänner bis Juni in der linken Spalte, Juli bis Dezember in der rechten Spalte (fangen auf der gleichen Höhe an)
Wenn ich dann in der Userform auf OK klicke soll er mir überprüfen welche Monate ausgewählt wurden.

y=12 'da ich in der 12. spalte anfange
...
For Each cbox In Controls
If TypeName(cbox) = "CheckBox" Then
If cbox.Value = True Then
.Cells(x, y) = userform1.textbox1.Value
End If
y = y + 1
End If
Next

x und y sind die Koordinaten im worksheet.
Die x Koordinate stimmt immer, jedoch ist y falsch.
Und zwar hab ich mir mal mit einer msgbox angesehen, welche Checkbox Excel gerade kontrolliert und da ist der Hund begraben. Excel geht da so vor: Jänner - Juni passt, dann Dezember, Juli - November
Egal was ich bisher probiert habe (Name der Checkbox in der Reihenfolge 1-12; Dezember weiter nach rechts gerückt; ...), ich verstehe nicht warum Dezember da vorgezogen wird.
Ich hoffe mir kann da jemand helfen!
Danke schon mal im voraus!
Grüße
Alex

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Reihenfolge bei For Each
26.09.2014 07:40:48
Christian
Hallo Alex,
IMO werden bei For Each die Objekte in der Reiehnfolge durchlaufen, in der sie erzeugt wurden.
Die Position der CheckBoxes auf dem Userformular ist dabei nicht relevant. Ebenso wenig die Control-Namen oder deren Caption.
Private Sub CommandButton1_Click()
Dim cbox As Control
For Each cbox In Me.Controls
If TypeName(cbox) = "CheckBox" Then
Debug.Print cbox.Name; " "; cbox.Caption
End If
Next
End Sub
Also entweder die Captions an die gegebene Reihenfolge anpassen,
oder jeweils einen Tag setzen und diesem im Code abfragen,
oder ...
Gruß
Christian

Anzeige
AW: Reihenfolge bei For Each
26.09.2014 13:20:49
Alex
Hallo Christian,
ja das macht Sinn. Hab jetzt die letzte Checkbox gelöscht und neu erstellt, jetzt funktioniert es.
Danke!!
Grüße
Alex
;
Anzeige
Anzeige

Infobox / Tutorial

Checkboxen in Userform abfragen: Ein Leitfaden


Schritt-für-Schritt-Anleitung

Um Checkboxen in einer Userform mit VBA abzufragen, folge den nachstehenden Schritten:

  1. Erstelle eine Userform in Excel mit mehreren Checkboxen (z. B. 12 für jeden Monat).

  2. Füge einen CommandButton hinzu, um die Abfrage zu starten.

  3. Verwende den folgenden VBA-Code, um die Werte der Checkboxen abzufragen:

    Private Sub CommandButton1_Click()
       Dim cbox As Control
       Dim x As Integer
       Dim y As Integer
       y = 12  ' Startposition für die Ausgabe
       x = 1   ' Zeile für die Ausgabe im Worksheet
    
       For Each cbox In Me.Controls
           If TypeName(cbox) = "CheckBox" Then
               If cbox.Value = True Then
                   .Cells(x, y) = userform1.TextBox1.Value
               End If
               y = y + 1
           End If
       Next
    End Sub
  4. Prüfe die Reihenfolge der Checkboxen: Die Abfrage erfolgt in der Reihenfolge, in der die Checkboxen erstellt wurden, nicht nach ihrer Position in der Userform.


Häufige Fehler und Lösungen

  • Falsche Reihenfolge bei der Abfrage: Wenn die Checkboxen nicht in der gewünschten Reihenfolge abgerufen werden, kann das an der Reihenfolge liegen, in der sie erstellt wurden. Überprüfe die Captions und passe sie an die gewünschte Reihenfolge an.

  • Checkboxen nicht erkannt: Stelle sicher, dass der Typ der Kontrolle korrekt ist. Der Code prüft nur auf "CheckBox".

  • Falsche Zuweisungen: Achte darauf, dass die Cells-Referenz im Code korrekt ist. Überprüfe die Zeilen- und Spaltennummern.


Alternative Methoden

Wenn Du die Reihenfolge der Checkboxen nicht ändern möchtest, kannst Du alternativ mit Tags arbeiten:

  1. Setze für jede Checkbox einen Tag, der die Reihenfolge definiert.
  2. Ändere den Code, um die Checkboxen nach diesem Tag abzufragen.

Hier ein Beispiel:

For Each cbox In Me.Controls
    If TypeName(cbox) = "CheckBox" Then
        If cbox.Value = True Then
            ' Hier den Tag auslesen
            .Cells(x, CInt(cbox.Tag)) = userform1.TextBox1.Value
        End If
    End If
Next

Praktische Beispiele

Stelle Dir vor, Du hast eine Userform mit 12 Checkboxen für jeden Monat. Wenn der Benutzer die Checkboxen für Januar, März und Mai auswählt, kannst Du diese Monate in eine Excel-Tabelle schreiben, indem Du den obigen Code verwendest. Achte darauf, dass die Checkboxen in der richtigen Reihenfolge ausgewählt werden.


Tipps für Profis

  • Debugging: Nutze Debug.Print, um den Status der Checkboxen während der Ausführung des Codes zu überprüfen. So siehst Du sofort, welche Checkboxen abgefragt werden.

  • Verwende Arrays: Wenn Du viele Checkboxen hast, kann es hilfreich sein, ihre Werte in ein Array zu speichern und dann in die Zellen zu schreiben.

  • Erstelle ein flexibles Design: Überlege, ob Du die Checkboxen dynamisch erstellen kannst, um die Wartbarkeit des Codes zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich die Checkboxen in einer bestimmten Reihenfolge abfragen?
Du kannst die Captions oder die Tags der Checkboxen anpassen, um die Reihenfolge bei der Abfrage zu kontrollieren.

2. Was mache ich, wenn eine Checkbox nicht erkannt wird?
Überprüfe, ob die Checkbox tatsächlich ein Kontrollkästchen ist und dass der Code im richtigen Kontext läuft (z. B. in der Userform).

3. Gibt es eine Möglichkeit, die Checkboxen in einer Schleife zu durchlaufen, ohne sie zu benennen?
Ja, der For Each-Befehl ermöglicht es Dir, alle Kontrollen in der Userform zu durchlaufen, ohne sie manuell zu benennen.

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