Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Auswahl von Checkboxen abfragen

Auswahl von Checkboxen abfragen
10.02.2022 16:49:08
Checkboxen
Guten Abend Leute,
ich habe in letzter Zeit sehr viel bei euch im Forum verbracht und meistens tolle Lösungen zu bekannten Problemen finden können.
Leider habe ich erst angefangen in VBA zu programmieren, wodruch mir noch teilweise die Basics fehlen.
Ziel:
Ich habe in meiner Userform mehrere checkboxen und würde gerne nur eine Auswahl aus diesen auswerten, bzw. zählen.
In diesem Fall sollen die Werte von den checkboxen 4 bis 9 ausgelesen und summiert werden.
D.h. ich kreuze in der Userform alles an was ich brauche und am Ende soll die Anzahl der Kreuze (aber nur die checkboxen 4 bis 9) der Formel zum weiterrechnen übergeben werden.
Bsp. wenn ich 4 Kreuze setze, dann sollte der Zähler am Ende den Wert 4 besitzen und der Formel übergeben werden.
Ich habe es geschafft, dass ich für jede einzelne checkbox einen Wert bekomme und diese am Ende zusammenzähle.
Jedoch könnt ihr euch vermutlich gute vorstellen wie lange der Code bereits für die 6 Boxen ist.
Porblem:
Wie kann ich meinen code für die einzelne Checkbox verallgemeinern und als Schleife für eine Auswahl von Checkboxen nutzen?
Schließlich möchte ich für die Zukunft Zeit und Code sparen :D
Hoffe, dass mir einer einen Tipp geben kann.
Code-Auszug:

Private Sub CheckBox3_Change()
If CheckBox3.Value = True Then
zähler = zähler+ 1
ElseIf CheckBox3.Value = False Then
zähler = zähler - 1
End If
If (zähler > 0) Then
ErgebnisA = Formel
ElseIf (zähler = 0) Then
ErgebnisB = Formel
End If
Lösungsansatz:
Ich habe leider nur Beispiele für die Zählung aller Checkboxen gefunden.
Diese passt leider nicht zu meinen Gegebenheiten, weil ich noch andere Checkboxen in der Userform verwende, die nicht mitgezählt werden sollen.

Public Sub ()
Dim cb As Variant
For cb = 4 To 9
If Me.OLEObjects("CheckBox" & cb).Object.Value = True Then
zähler = zähler + 1
ElseIf Me.OLEObjects("CheckBox" & cb).Object.Value = False Then
zähler = zähler- 1
End If
If (zähler > 0) Then
ErgebnisA = Formel
ElseIf (zähler = 0) Then
ErgebnisB = Formel
End If
Next
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Auswahl von Checkboxen abfragen
10.02.2022 17:14:37
Checkboxen
Hi,
davon ausgegangen, dein Userform heißt Userform1, dann versuchs mal so:

Sub sbChkSum()
Dim lctrChk As Control, liCount As Integer
For Each lctrChk In Userform1.Controls
Select Case lctrChk.Name
Case "CheckBox4", "CheckBox5", "CheckBox6", "CheckBox7", "CheckBox8", "CheckBox9"
If lctrChk.Value = 1 Then
liCount = liCount + 1
End If
End Select
Next
MsgBox "Es wurden " & liCount & " CheckBoxen angeklickt"
End Sub
Es kann sein, dass du vielleicht einige Texte wie CheckBox... in Checkbox... umändern musst, da ich den Code wegen fehlender Bsp-Datei von dir nicht testen kann. Und vllt hab ich mich ja verschrieben oder so.
Hilfts?
Ciao
Thorsten
Anzeige
-1
10.02.2022 17:31:37
{Boris}
Hi Thorsten,
eine aktive CheckBox hat den Wert -1 ,insofern:
If lctrChk.Value = -1 Then
VG, Boris
AW: -1
11.02.2022 08:17:08
Oberschlumpf
ahh, danke Boris, hätt ich getestet und nich nur ausm Gedächtnis reproduziert, hätt ich das bestimmt auch bemerkt...irgdwann...auf jeden Fall vorm Absenden :-)
aber um mich vor vielleicht möglicher Regresspflicht zu schützen, hatte ich den Fragenden ja auch zum Glück darüber informiert, dass der eine oder andere Befehl falsch aufgeschrieben sein kann :-)
für dich ein schönes WE!
AW: Auswahl von Checkboxen abfragen
10.02.2022 17:30:00
Checkboxen
HI
beispielsweise so, der Code sollte beim Schließen der Userform bzw beim Drücken des OK-Buttons (falls du einen hast), ausgeführt werden:

Dim Zähler as Long
dim cbName
For each cbName in Array("Checkbox4", "Checkbox5", "Checkbox6", "Checkbox7", "Checkbox8", "Checkbox9")
Zähler = Zähler - me.Controls(cbName).value
next
im Array listest du die Namen aller Checkboxen auf, die du an dieser Stelle auswerten willst. Das erlaubt dir, beliebige Checkboxen zu kombinieren, unabhängig von deren Namen (auch wenn du sie umbenannt hast).
zur Zählung: der CheckboxValue ist TRUE oder FALSE, je nachdem ob die Checkbox ausgewählt ist oder nicht. In berechnungen wird in VBA ein TRUE wie -1 und ein FALSE wie 0 gewertet, daher dann man das hier so kompakt ohne IF-Abfrage programmieren. Beachte auch das -1 ! das ist hier anders als in Excelformeln, wo ein WAHR als +1 gewertet wird.
solltest du die Checkboxen jedoch streng durchnummeriert und in der richtigen Anordnung haben, könntest du auch so vereinfachen:

Dim Zähler as Long
dim i as long
For i = 4 to 9
Zähler = Zähler - me.Controls("Checkbox" & i).value
next
Gruß Daniel
Anzeige
AW: Auswahl von Checkboxen abfragen
10.02.2022 19:01:06
Checkboxen
Hallo

Dim Zahl As Byte
Private Sub CheckBox4_Change()
Zahl = Application.Sum(CheckBox4 * -1, CheckBox5 * -1, CheckBox6 * -1, CheckBox7 * -1, CheckBox8 * -1, CheckBox9 * -1)
End Sub
Gruß Gerd
Gute Idee...
10.02.2022 19:20:56
{Boris}
Hi Gerd,
...und das *-1 ist bei der Summierung gar nicht nötig:

MsgBox Application.Sum(CheckBox4, CheckBox5, CheckBox6, CheckBox7, CheckBox8, CheckBox9)
VG, Boris
AW: Gute Idee...
10.02.2022 19:37:08
GerdL
Hi Boris,
ich war mir nicht mehr sicher. Ich bin nämlich beim Testen mit Array(), .Value, ohne .Value, Abs(Application.Sum. ---) etc. aus der Spur geraten. :-)
Gruß Gerd
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige