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

Anzahl der Aktiven CheckBoxen in Userform ermittel

Forumthread: Anzahl der Aktiven CheckBoxen in Userform ermittel

Anzahl der Aktiven CheckBoxen in Userform ermittel
20.09.2005 14:18:19
Chris
Hallo Zusammen,
habe gerade folgendes Problem:
In einer Userform habe ich 6 Checkboxen. Nun möchte ich die Anzahl der aktiven Checkboxen ermitteln und dann die "Caption" der aktiven Checkboxen in eine Zelle schreiben.
Vielen Dank schon jetzt einmal für Eure schnelle Hilfe
Gruß
Chris
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Anzahl der Aktiven CheckBoxen in Userform ermittel
20.09.2005 14:40:55
Andi
Hi,
so?
For Each c In UserForm1.Controls
If TypeName(c) = "CheckBox" Then
If c.Enabled = True Then
zaehler = zaehler + 1
Worksheets("Tabelle1").Cells(zaehler, 1).Value = c.Caption
End If
End If
Next c
MsgBox CStr(zaehler) & " aktive Checkboxen"
Schönen Gruß,
Andi
Anzeige
AW: Anzahl der Aktiven CheckBoxen in Userform ermittel
20.09.2005 15:21:20
Chris
Vielen Dank für Eure Hilfe.
Habe die einfache Version von Andi genommen, die dann auch gleich bei mir funktioniert hat!
Nochmals vielen Dank
Gruß
Chris
Gern geschehen... (mt)
20.09.2005 15:34:17
Andi
Hi Chris,
schön, dass es funktioniert; der Vollständigkeit wegen sei noch angemerkt, dass c als Control dimensioniert gehört, aber das hast Du Dir wahrscheinlich auch schon gedacht...
Schönen Gruß,
Andi
Anzeige
AW: Anzahl der Aktiven CheckBoxen in Userform ermittel
20.09.2005 14:41:36
Heiko
Hallo Chris,
da hab ich was für dich, wenn es unbedingt die Caption sein muss dann diese Zeilen anpassen:
arrSetBoxes(inti) = chkBox.Name IN chkBox.Caption
' So 09.03.05 Funktion BoxCheck()
' Mit dieser Funktion wird gecheckt ob im angegebenen Objekt bzw. Gruppe befindliche
' Options/Kontrollfelder angewählt sind.
' Ist kein Options/Kontrollfeld gewählt gibt die Funktion ein leeres Datenfeld zurück.
' Ist ein Options/Kontrollfeld gewählt gibt die Funktion ein Datenfeld mit den Namen
' der gewählten Boxen zurück.
' Prüfen von Boxen auf einem kompletten Userforms ob was gewählt wurde.
' If VarType(BoxCheck(UserForm1)) = vbEmpty Then MsgBox "Nichts gewählt, nochmal !!!"
' Prüfen von Boxen nur innerhalb eines Rahmens.
' If VarType(BoxCheck(Frame1)) = vbEmpty Then MsgBox "Nichts gewählt, nochmal !!!"
' Prüfen von Boxen auf Tabellenblättern, es werden alle Boxen gecheckt die den angegebenen
' Gruppennamen haben. Es wird das aktive Tabellenblatt überprüft !
' Bei der Erstellung des tabellenblattes auf die richtige Vergabe der GroupName achten !
' If VarType(BoxCheck(, "Gruppe1")) = vbEmpty Then MsgBox "Nichts gewählt, nochmal !!!"
' Beispiel für Rückgabe der gewählten Boxen, bei Rahmen dito z.B. (BoxCheck(Rahmen1))
' Private Suub Test()
' Dim arrResult As Variant
' Dim inti As Integer
' arrResult = BoxCheck(, "Gruppe1")
' If VarType(arrResult) vbEmpty Then
' For inti = 0 To UBound(arrResult)
' MsgBox arrResult(inti)
' Next inti
' Else
' MsgBox " Es wurde nichts gewählt!"
' End If
' End Sub
' Aufruf wenn Funktion in der Personl.xls liegt.
' If VarType(Application.Run("PERSONL.xls!BoxCheck", Frame1)) vbEmpty Then
' If VarType(Application.Run("PERSONL.xls!BoxCheck", , Tabelle1 )) vbEmpty Then
' ******************************************************************************************* '

Function BoxCheck(Optional varObjekt As Variant, Optional strGruppe As String = "strDefault")
' Definition der Variablen.
Dim cltBox As Control
Dim objBox As OLEObject
Dim chkBox As MSForms.CheckBox
Dim optBox As MSForms.OptionButton
Dim arrSetBoxes As Variant
Dim inti As Integer: inti = 0
' Erster Teil für Rahmen in Userforms
' Wurde ein Objekt (Rahmen bzw. Userform) übergeben dann diesen Teil abarbeiten.
If IsMissing(varObjekt) = False Then
' Alle Objekt im angegebenen Bereich durchlaufen.
For Each cltBox In varObjekt.Controls
' Ist es eine Checkbox oder ein Optionbutton dann
If UCase(TypeName(cltBox)) = UCase("Checkbox") Or UCase(TypeName(cltBox)) = UCase("Optionbutton") Then
' Ist die Box angewählt dann
If cltBox.Value = True Then
' Im ersten Durchlauf das Array dimensionieren, so wird nur ein Array zurück-
' gegeben wenn auch was gewählt ist.
If inti = 0 Then ReDim arrSetBoxes(0)
' Datenfeld zur Aufnahme der gesetzten Boxen.
ReDim Preserve arrSetBoxes(inti)
arrSetBoxes(inti) = cltBox.Name
inti = inti + 1
End If
End If
Next
' Übergabe des Arrays an die Funktion.
BoxCheck = arrSetBoxes
Exit Function
End If
' Zweiter Teil für Gruppen auf Tabellenblättern
' Wurde eine Gruppe übergeben dann diesen Teil abarbeiten.
If strGruppe <> "strDefault" Then
' Alle Objekt im angegebenen Bereich durchlaufen.
For Each objBox In ActiveSheet.OLEObjects
' Ist es ein Optionbutton dann
If TypeName(objBox.Object) = "OptionButton" Then
' Damit der GroupName ausgewertet werden kann diesen Umweg.
Set optBox = objBox.Object
If optBox = True And optBox.GroupName = strGruppe Then
If optBox.Value = True Then
' Im ersten Durchlauf das Array dimensionieren, so wird nur ein Array
' zurückgegeben wenn auch was gewählt ist.
If inti = 0 Then ReDim arrSetBoxes(0)
' Datenfeld zur Aufnahme der gesetzten Boxen.
ReDim Preserve arrSetBoxes(inti)
arrSetBoxes(inti) = optBox.Name
inti = inti + 1
End If
End If
End If
If TypeName(objBox.Object) = "CheckBox" Then
Set chkBox = objBox.Object
If chkBox And chkBox.GroupName = strGruppe Then
If chkBox.Value = True Then
If inti = 0 Then ReDim arrSetBoxes(0)
' Datenfeld zur Aufnahme der gesetzten Boxen.
ReDim Preserve arrSetBoxes(inti)
arrSetBoxes(inti) = chkBox.Name
inti = inti + 1
End If
End If
End If
Next objBox
BoxCheck = arrSetBoxes
Exit Function
End If
MsgBox "Es wurde kein Rahmen oder Gruppenname angegeben!", vbCritical, " DIS 2005"
End Function

' ******************************************************************************************** '
Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: Anzahl der Aktiven CheckBoxen in Userform ermittel
20.09.2005 15:23:02
Chris
Hallo Heiko,
Vielen Dank für Deine Hilfe.
Habe die einfache Version von Andi genommen, die dann auch gleich bei mir funktioniert hat! Werde mir jedoch auch Deinen Quellcode nochmal ansehen.
Nochmals vielen Dank
Gruß
Chris
AW: Anzahl der Aktiven CheckBoxen in Userform ermittel
20.09.2005 14:44:49
{Boris}
Hi Chris,
gesteuert über einen Commandbutton:
Option Explicit

Private Sub CommandButton1_Click()
Dim myCtrl As Control, i As Byte, sTemp As String
For Each myCtrl In Me.Controls
If TypeOf myCtrl Is MSForms.CheckBox Then
If myCtrl.Value = True Then
i = i + 1
sTemp = sTemp & myCtrl.Caption & ", "
End If
End If
Next myCtrl
MsgBox i, , "Anzahl aktive Boxen:"
MsgBox sTemp, , "Captions der aktiven Boxen:"
End Sub

Grüße Boris
Anzeige
AW: Anzahl der Aktiven CheckBoxen in Userform ermittel
20.09.2005 15:24:48
Chris
Hallo Boris,
vielen Dank für Deine Hilfe.
Habe mittlerweile die Version von Andi getestet, die dann auch gleich bei mir funktioniert hat! Werde mir Deinen Code aber auch noch mal ansehen.
Nochmals vielen Dank
Gruß
Chris
;
Anzeige
Anzeige

Infobox / Tutorial

Anzahl der aktiven Checkboxen in einer Userform ermitteln


Schritt-für-Schritt-Anleitung

Um die Anzahl der aktiven Checkboxen in einer Userform zu zählen und die Captions dieser Checkboxen in eine Excel-Tabelle zu schreiben, kannst du den folgenden VBA-Code verwenden:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).
  2. Füge eine Userform hinzu und platziere mehrere Checkboxen sowie einen CommandButton auf der Userform.
  3. Verwende den folgenden Code im Codebereich der Userform:
Private Sub CommandButton1_Click()
    Dim myCtrl As Control
    Dim i As Byte
    Dim sTemp As String

    For Each myCtrl In Me.Controls
        If TypeOf myCtrl Is MSForms.CheckBox Then
            If myCtrl.Value = True Then
                i = i + 1
                sTemp = sTemp & myCtrl.Caption & ", "
            End If
        End If
    Next myCtrl

    MsgBox i, , "Anzahl aktive Boxen:"
    MsgBox sTemp, , "Captions der aktiven Boxen:"
End Sub
  1. Schließe den VBA-Editor und teste die Userform, indem du einige Checkboxen aktivierst und auf den CommandButton klickst.

Häufige Fehler und Lösungen

  • Fehler: Die Userform zeigt keine Checkboxen an.
    Lösung: Stelle sicher, dass die Checkboxen korrekt auf der Userform platziert sind und dass die Userform selbst sichtbar ist.

  • Fehler: Der Code gibt immer null aktive Checkboxen zurück.
    Lösung: Überprüfe, ob die Checkboxen tatsächlich aktiviert sind. Achte darauf, dass du beim Testen die Checkboxen markierst.

  • Fehler: MsgBox zeigt keinen Text an.
    Lösung: Stelle sicher, dass die Captions der Checkboxen nicht leer sind. Füge gegebenenfalls Standardtexte hinzu.


Alternative Methoden

Eine andere Methode, um die Anzahl der Checkboxen zu zählen, besteht darin, die For Each-Schleife zu verwenden, um direkt auf die Controls der Userform zuzugreifen. Hier ist ein Beispiel:

For Each c In UserForm1.Controls
    If TypeName(c) = "CheckBox" And c.Value = True Then
        zaehler = zaehler + 1
        Worksheets("Tabelle1").Cells(zaehler, 1).Value = c.Caption
    End If
Next c
MsgBox CStr(zaehler) & " aktive Checkboxen"

Diese Methode ermöglicht es dir, die Checkboxen in einem bestimmten Objektrahmen zu zählen und die Ergebnisse in einer Excel-Tabelle zu speichern.


Praktische Beispiele

Hier ist ein einfaches Beispiel für das Zählen der Checkboxen in einer Userform:

  1. Erstelle eine Userform mit 3 Checkboxen: "Option 1", "Option 2" und "Option 3".
  2. Füge einen CommandButton hinzu, um die Zählung zu initiieren.
  3. Verwende den oben genannten Code im CommandButton.

Wenn du die Userform ausführst und die Checkboxen aktivierst, zeigt die MsgBox die Anzahl der aktiven Checkboxen und deren Captions an.


Tipps für Profis

  • Nutze Option Explicit, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.

  • Dokumentiere deinen Code mit Kommentaren, insbesondere wenn du komplexe Logik implementierst.

  • Erstelle Funktionen, um wiederverwendbaren Code zu schreiben, wenn du häufig bestimmte Aufgaben erledigen musst, wie das Zählen von Checkboxen.

  • Für größere Userforms mit vielen Checkboxen solltest du die Checkboxen in einem Objektrahmen gruppieren (Objektrahmen zum befüllen), um die Übersichtlichkeit zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich die Checkboxen in einer bestimmten Gruppe zählen?
Du kannst die Funktion anpassen, um nur Checkboxen innerhalb eines Objektrahmens oder einer Gruppe zu zählen. Nutze die Controls-Eigenschaft des Objektrahmens.

2. Was mache ich, wenn ich keine Checkboxen in meiner Userform sehe?
Überprüfe, ob die Checkboxen korrekt hinzugefügt wurden und ob die Userform korrekt angezeigt wird. Stelle sicher, dass die Checkboxen nicht hinter anderen Controls versteckt sind.

3. Wie kann ich den Status der Checkboxen speichern, wenn die Userform geschlossen wird?
Du kannst die Werte der Checkboxen in einer globalen Variablen speichern oder sie direkt in eine Zelle in Excel schreiben, wenn die Userform geschlossen wird.

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