Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

For Each cb in Me.Controls - REIHENFOLGE

Forumthread: For Each cb in Me.Controls - REIHENFOLGE

For Each cb in Me.Controls - REIHENFOLGE
Silvia
Hi Leute,
ich hab auf einer Schaltfläche einer Userform eine Click-Sub mit folgendem Inhalt (unter anderem):
For Each cb In Me.Controls
If TypeName(cb) = "CheckBox" Then
...
End If
Next cb
Wie kann ich festlegen, in welcher Reihenfolge die CheckBoxen angesprochen werden? (Mit TabIndex gehts anscheindend nicht)
lg, silvia
Anzeige
AW: For Each cb in Me.Controls - REIHENFOLGE
Ulf
Wozu ist das wichtig? Wenn du jede ansprichst, machst du doch wohl
mit allen das Gleiche, oder?
Ulf
? For Each cb in Me.Controls - REIHENFOLGE
Silvia
Hi Ulf,
nein, ich mach nicht mit jeder checkbox das gleiche.
je nach dem namen der angehakten checkboxen werden unterschiedliche Funktionen aufgerufen. Diese geben dann jeweils irgendwelche Texte aus, die in einer bestimmten Reihenfolge erscheinen müssen.
lg, Silvia
For Each cb In Me.Controls
If TypeName(cb) = "CheckBox" Then
If cb.Value = True And cb.name Like "cb*" Then
zaehler = Application.Run(Right(cb.name, Len(cb.name) - 2), tabzahl, AnzahlNC, AnzahlNNC, zaehler) + zaehler
End If
End If
Next cb
Anzeige
AW: ? For Each cb in Me.Controls - REIHENFOLGE
Ulf
Ich würde an deiner Stelle die cb so benennen, das eine eindeutige
Reihenfolge gegeben ist, also z.B. cb1, cb2 usw., dann könntest du
so vorgehen:
dim c as integer
for c = 1 to 10 'Anzahl der cb
if controls("cb" & c) then
run(deineFunctionoderSub)
end if
next
Ulf
Anzeige
AW: ? For Each cb in Me.Controls - REIHENFOLGE
Silvia
Danke für deine rasche Antwort !!!
gibts vielleicht sonst noch eine Möglichkeit, die Reihenfolge (so ähnlich wie mit TabIndex) festzulegen? Ohne dass ich die checkboxennamen ändern muss?
lg, und Danke, Silvia
AW: ? For Each cb in Me.Controls - REIHENFOLGE
Ulf
Ich sehe da keine Chance, die Aktivierreihenfolge bringst jedenfalls nicht.
Nach welchen Regeln VBA da aussucht, weiß ich nicht.
Ulf
Anzeige
AW: ? For Each cb in Me.Controls - REIHENFOLGE
Danke
erst mal herzlichen dank ulf für deine bemühungen
vielleicht hat ja sonst irgendjemand noch eine idee, wie ich das lösen könnte
lg, Sivlia
AW: ? For Each cb in Me.Controls - REIHENFOLGE
Klaus-Dieter
Hallo Silvia,
wenn du im Entwurfsmodus mit der rechten Maustaste in das Userfom klickst, öffnet sich ein Menü. Der letzte Punkt heißt Aktivierreihenfolge. Den rufst du auf, es öffnet sich ein neues Fenster, in dem du die Aktivierreihenfolge aller Objekte einstellen kannst. So viel ich weiß, wird von da aus auch gesteuert, in welcher Reihenfolge die Objekte von deinem Quelltext angesprochen werden.
Gruß Klaus-Dieter

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Reihenfolge von CheckBoxen in Excel VBA UserForms festlegen


Schritt-für-Schritt-Anleitung

Um die Reihenfolge, in der CheckBoxen in einer UserForm angesprochen werden, festzulegen, kannst Du die Me.Controls-Sammlung in VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications Editor zu öffnen.

  2. Erstelle eine UserForm: Füge eine neue UserForm hinzu, wenn Du noch keine hast.

  3. Füge CheckBoxen hinzu: Platziere mehrere CheckBoxen auf Deiner UserForm.

  4. Füge eine Schaltfläche hinzu: Platziere eine Schaltfläche, die beim Klick die CheckBoxen abarbeiten soll.

  5. Implementiere den Code: Füge den folgenden Code in die Click-Sub der Schaltfläche ein:

    Private Sub CommandButton1_Click()
        Dim cb As Control
        Dim zaehler As Integer
    
        zaehler = 0
        For Each cb In Me.Controls
            If TypeName(cb) = "CheckBox" Then
                If cb.Value = True And cb.Name Like "cb*" Then
                    zaehler = Application.Run(Right(cb.Name, Len(cb.Name) - 2), zaehler) + zaehler
                End If
            End If
        Next cb
    End Sub
  6. Benenne die CheckBoxen: Stelle sicher, dass Deine CheckBoxen nach einem bestimmten Muster benannt sind (z.B. cb1, cb2), um die Reihenfolge leichter steuern zu können.


Häufige Fehler und Lösungen

  • Fehler: Die CheckBoxen werden nicht in der gewünschten Reihenfolge angesprochen.
    Lösung: Überprüfe die Namen Deiner CheckBoxen. Stelle sicher, dass sie einheitlich benannt sind, um die Reihenfolge korrekt steuern zu können.

  • Fehler: Die For Each-Schleife erkennt die CheckBoxen nicht.
    Lösung: Stelle sicher, dass Du die richtige Syntax verwendest und dass die CheckBoxen tatsächlich in der UserForm vorhanden sind.


Alternative Methoden

Falls Du die Reihenfolge der CheckBoxen nicht über die Namen steuern möchtest, gibt es eine alternative Methode:

  • Aktivierreihenfolge einstellen: Klicke im Entwurfsmodus mit der rechten Maustaste auf die UserForm und wähle "Aktivierreihenfolge". Hier kannst Du die Reihenfolge der Steuerelemente manuell festlegen. Dies beeinflusst, in welcher Reihenfolge die Steuerelemente in Deinem VBA-Code angesprochen werden.

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du die Reihenfolge der CheckBoxen mit Me.Controls steuern kannst:

Private Sub CommandButton1_Click()
    Dim cb As Control
    Dim output As String

    output = ""
    For Each cb In Me.Controls
        If TypeName(cb) = "CheckBox" And cb.Value = True Then
            output = output & cb.Caption & vbCrLf
        End If
    Next cb

    MsgBox output
End Sub

In diesem Beispiel wird eine Meldung angezeigt, die die Namen der aktivierten CheckBoxen auflistet.


Tipps für Profis

  • Benennungskonvention: Verwende eine klare Benennungskonvention für Deine CheckBoxen (z.B. cb1, cb2, ...), um die Programmierung zu vereinfachen.
  • Nutzung von Arrays: Wenn Du viele CheckBoxen hast, kannst Du auch ein Array verwenden, um die Werte zu speichern und die Verarbeitung effizienter zu gestalten.
  • Debugging: Nutze die Debug.Print-Funktion, um den Status Deiner CheckBoxen während der Ausführung zu überprüfen.

FAQ: Häufige Fragen

1. Wie kann ich die Reihenfolge der CheckBoxen ändern, ohne die Namen zu ändern?
Du kannst die Aktivierreihenfolge im Entwurfsmodus der UserForm ändern, was die Reihenfolge beeinflusst, in der sie im Code angesprochen werden.

2. Was ist Me.Controls?
Me.Controls ist eine Sammlung von Steuerelementen in der aktuellen UserForm. Du kannst sie verwenden, um auf alle Steuerelemente wie CheckBoxen, Textfelder usw. zuzugreifen.

3. Kann ich auch andere Steuerelemente mit For Each durchlaufen?
Ja, Du kannst For Each verwenden, um durch alle Steuerelemente in Me.Controls zu iterieren, indem Du den Typ mit TypeName überprüfst, wie im obigen Beispiel gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige