Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
632to636
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
632to636
632to636
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Checkboxen in Schleifen

Checkboxen in Schleifen
05.07.2005 03:50:47
Conny
Hi Leute,
ich habe 84 Checkboxen und möchte diese nun in einer Schleife abfragen, ich habe hier etwas gefunden, das vielleicht helfen kann, leider muss ich gestehen, dass ich nicht genau weiß was da vor sich geht, vielleicht kann mir einer helfen oder eine andere Lösung nennen.
Gruß Conny

http://www.xlfaq.herber.de/xlbasics/var_12.htm

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Checkboxen in Schleifen
05.07.2005 05:15:24
Nepumuk
Morgen Conny,
in dem Beispiel werden die Checkboxen in einer Collection zusammengefasst. Das ist von Vorteil, wenn sich sehr viele Controls auf einem Userform befinden. Denn in einer Schleife über alle Controls, werden auch alle durchlaufen. Sind sie in einer Collection zusammengefasst, kannst du eine Schleife über die Collection laufen lassen, was dann schneller geht.
Du kannst es aber auch so machen:
Diese Routine liefert den Typ des Controls zurück.
Private Sub test1()
    Dim frmControl As Control
    For Each frmControl In Me.Controls
        Debug.Print TypeName(frmControl)
    Next
End Sub

Diese Routine liefer Wahr zurück, wenn das Control eine Checkbox ist
Private Sub test2()
    Dim frmControl As Control
    For Each frmControl In Me.Controls
        Debug.Print TypeOf frmControl Is MSForms.CheckBox
    Next
End Sub

Diese Routine liefert den Wert der Checkboxen Checkbox1 bis Checkbox3 zurück, so die Namen auch so lauten.
Private Sub test3()
    Dim intIndex As Integer
    For intIndex = 1 To 3
        Debug.Print Me.Controls("CheckBox" & CStr(intIndex)).Value
    Next
End Sub

Aber, wenn sich die Checkboxen in einem Frame befinden, so sind diese Controls des Frames. Ein Frame ist ein so genanntes Containerobjekt. Das geht dann so:
Private Sub test4()
    Dim frmControl As Control
    For Each frmControl In Me.Frame1.Controls
        Debug.Print TypeOf frmControl Is MSForms.CheckBox
    Next
End Sub

Wobei du hier auch die anderen Methoden anwenden kannst.
Gruß
Nepumuk
Anzeige
AW: Checkboxen in Schleifen
05.07.2005 05:42:43
Conny
Danke Nepumuk,
ich werde es mal versuchen, ich weiß nicht was Du als sehr viele bezeichnest, aber derzeit habe ich eine Arbeitsmappe mit 10 Arbeitsblättern und einem Userform, dieses Userform enthält ca. 800 Objekte, davon allein in einem Frame 84 Checkboxen. Derzeit frage ich jede Box einzeln ab, aber ich hoffe meinen Quelltext der nun 108 A4-Seiten umfasst durch solche Schleifen mindestens um 20% Kürzen zu können.
Gruß Conny
AW: Checkboxen in Schleifen
05.07.2005 06:36:26
Conny
Hi Nepumuk,
vielleicht stelle ich mich gerade etwas doof an, aber wie bekomme ich die Werte da nun Raus, wie rufe ich die Objekte nun auf. Wärst Du so lieb und würdest mir mal nen Schleifenbeispiel schreiben?
Gruß Conny
Anzeige
AW: Checkboxen in Schleifen
05.07.2005 07:48:34
Heiko
Hallo Conny,
vielleicht hilft dir das weiter.

Private Sub CommandButton1_Click()
Dim frmControl As Control
For Each frmControl In Me.Controls
If TypeOf frmControl Is MSForms.CheckBox Then
' frmControl.Name  gibt z.B. den Namen aus.
' frmControl.Value gibt z.B. den Zustand aus.
MsgBox "Die Checkbox " & frmControl.Name & " ist angeklickt!" & vbCr & _
"Das ist " & frmControl.Value, vbInformation
End If
Next
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
AW: Checkboxen in Schleifen
05.07.2005 17:16:37
Conny
Erstmal Danke für die Antwort, habe es gerade gelesen und werde mich mal an die arbeit machen, ich habe über diese 84Checkboxen etwas über 1000 Arbeitsblatt-Zellen beschrieben zum Speichern hoffe nun durch Schleifen das was derzeit auf 10 A4 Seiten steht auf 2 A4 Seiten kürzen zu können und vielleicht sogar Rechenzeit dabei zu gewinnen. Melde mich sobald ich?s am Laufen habe.
Gruß Conny
Derzeit siehts etwa so aus

Sub Box_lesen()
With Tabelle1
Box1_1 = .Cells(1,1)
Box1_2 = .Cells(1,2)
Box1_3 = .Cells(1,3)
Box2_1 = .Cells(2,1)
Box2_2 = .Cells(2,2)
Box2_3 = .Cells(2,3)
Box3_1 = .Cells(3,1)
Box3_2 = .Cells(3,2)
Box3_3 = .Cells(3,3)
End With
End Sub


Sub Box1_1()
Tabelle1.Cells(1,1) = -Box1_1
End Sub


Sub Box1_2()
Tabelle1.Cells(1,2) = -Box1_2
End Sub

...
Denke das geht sicher viel effektiver.
Anzeige
AW: Checkboxen in Schleifen
05.07.2005 17:31:02
Nepumuk
Hi Conny,
das erste Makro schreibst du, ausgehend von deinem Beispiel, so:
Sub Box_lesen()
    Dim lngRow As Long, intColumn As Integer
    With Tabelle1
        For lngRow = 1 To 3
            For intColumn = 1 To 3
                Me.Controls("Box" & CStr(intColumn) & "_" & CStr(lngRow)) = _
                    .Cells(lngRow, intColumn)
            Next
        Next
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Checkboxen in Schleifen
05.07.2005 20:13:08
Conny
Vielen Dank, das läuft soweit ganz gut, leider konnte ich nicht soviel einsparen wie erhofft, aber immerhin habe ich das lesen von 80 auf 9 Zeilen Reduzieren können. Das speichern ist aber der weit größere Teil.
Der

Sub Box1_1()
Tabelle1.Cells(1,1) = -Box1_1
End Sub

sollte natürlich

Sub Box1_1_Change()
Tabelle1.Cells(1,1) = -Box1_1
End Sub

heißen, ich befürchte das kann ich aber leider nicht zusammenlegen?
Gruß Conny
AW: Checkboxen in Schleifen
05.07.2005 20:16:21
Nepumuk
Hi Conny,
hast du schon mal eine Klasse programmiert, also ein Klassenmodul verwendet?
Gruß
Nepumuk
Die Spezialisten
Anzeige
AW: Checkboxen in Schleifen
05.07.2005 20:35:57
Conny
Nein bis jetzt nur Module, doch leider ist das ganze Projekt mittlerweile sehr unübersichtlich, ich habe in VBA nie irgendwelche Kurse oder etwas belegt und gerade dieses Projekt ist in ein paar Jahren zusammen gewachsen, immer etwas neues dazu, d.h. zum Teil ist der Quelltext recht stümperhaft, zum Teil auch recht brauchbar. Eh ich jetzt weiter mache, wollte ich erstmal richtig aufräumen, denke aber Klassen wären schon nicht schlecht, habe da aber nur etwas Erfahrung aus C++ mit.
Gruß Conny
AW: Checkboxen in Schleifen
05.07.2005 21:44:59
Conny
Ich werde Morgen dran weiter machen, aber ich glaube Dein Beispiel leutet mir schon ein, gibt ja echt viele Möglichkeiten.
Vielen Dank und einen schönen Abend
Gruß Conny
AW: Checkboxen in Schleifen
06.07.2005 00:48:00
Conny
Vielen Dank,
das scheint nun wirklich viel zu sparen, ich denke hier lohnt sich der Einsatz von Klassen ganz sicher. Ich gehe davon aus, dass ich wenn ich das Projekt fertig habe ca. 1000Objekte in einem UserForm haben werde.
Diese Art der Speicherung und des Auslesens viel effektiver. Im Testbetrieb (in meinem Projekt) habe ich es schon zum laufen bekommen muss jetzt nur die ganzen Rechenoptionen einbinden, wann ich eine Checkbox überhaupt aktiviert werden soll und wo die dann gespeichert wird. Da ich wie gesagt 84 Checkboxen für ca. 1000 Möglichkeiten nutze.
Gruß Conny
Anzeige
AW: Checkboxen in Schleifen
06.07.2005 01:53:22
Conny
Danke, Danke, Danke.
Dies hat nun mehr Probleme gelöst, als ich zu hoffen wagte, es gibt jetzt noch ein winziges Problem, da ich auf Knopfdruck alle Checkboxen speichern will, egal ob sie sich geändert haben oder nicht. Der Sinn dabei ist, dass ich die Checkboxen mehrfach verwende und den Speicherbereich über eine ComboBox festlege. Aber ich denke das bekomme ich morgen hoffentlich ohne Hilfe hin. ;-)
Gruß Conny
So siehts derzeit aus, läuft echt super.
UserForm:
Option Explicit
Dim objCheckBox() As clsCheckBox
Sub Fahrer_Einsatz_lesen()

Dim intZeile, intSpalte As Integer 'Bereich wo die Daten gespeichert werden
Dim intFahrer_Nr_intern, intGP_Nr As Integer 'Fahrer_Nr_intern / GP_Nr

With Team_Name 'ComboBox mit Teamnamen zur Bereichsfestlegung

If .ListIndex intSpalte = 3
intZeile = 5 * .ListIndex + 3
Else 'Team 06-11
intSpalte = 28
intZeile = 5 * (.ListIndex - 6) + 3
End If

End With

With Einsatz

For intFahrer_Nr_intern = 1 To 4
For intGP_Nr = 1 To 20
Me.Controls("F" & CStr(intFahrer_Nr_intern) & "_" & CStr(intGP_Nr)) = _
.Cells(intFahrer_Nr_intern + intZeile, intGP_Nr + intSpalte)
Next intGP_Nr
Next intFahrer_Nr_intern

End With
Speichern.Visible = False

End Sub
Klassenmodul:
Option Explicit
Public WithEvents frmCheckBox As MSForms.CheckBox

Private Sub frmCheckBox_Change()
Dim strAddress As String
Dim intSpalte, intZeile As Integer
With Eingabe.Team_Name 'ComboBox mit Teamnamen zur Bereichsfestlegung
If .ListIndex < 6 Then              'Team 00-05
intSpalte = 3
intZeile = 5 * .ListIndex + 3
Else                                'Team 06-11
intSpalte = 28
intZeile = 5 * (.ListIndex - 6) + 3
End If
End With
strAddress = Mid(frmCheckBox.name, 2)
Test.Cells((CLng(Split(strAddress, "_")(0))) + intZeile, (CLng(Split(strAddress, "_")(1))) + intSpalte) = -frmCheckBox
End Sub

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige