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

For Each Zelle In Range("D1:D" & Range("D40000"

Forumthread: For Each Zelle In Range("D1:D" & Range("D40000"

For Each Zelle In Range("D1:D" & Range("D40000"
27.08.2008 22:23:00
reiner
Hallo Leute,
mit:

For Each Zelle In Range("D1:D" & Range("D40000").End(xlUp).Row)
If Zelle.Text  0 Then
cboDatum.AddItem Zelle.Offset(0, 0).Text & "  " & Zelle.Offset(0, 1).Text
End If
Next


..wird eine CB mit den Inhalten der Spalten „D“ und „E“ befüllt, der Nachteil ist jedoch dass sämtliche Datensätze (z.Zt. über 5000) in die CB eingelesen werden.
Diese Datensätze wurden in den letzten 8 Jahren angelegt.
Über CheckBoxen will ich nun einzelne Jahrgänge zum Einlesen in die CB auswählen; der erste Datensatz des jeweiligen Jahrgangs wird über die Variable „BereichAnfang“ und der letzte Datensatz über „BereichEnde“ definiert.
Im Moment stehe ich auf dem Schlauch da es mir gelingt mit der „FOR“- Anweisung den Bereich mittels der beiden Variablen einzugrenzen.
Weiß jemand wie der korrekte Programmcode lauten müsste?
mfg
reiner

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: For Each Zelle In Range("D1:D" & Range("D40
27.08.2008 22:37:00
Uduuh
Hallo,
wenn BereichAnfang und BereichEnde auch Ranges sind:
For each Zelle in Range(BereichAnfang, BereichEnde)
Gruß aus’m Pott
Udo

ComboBox befüllen
27.08.2008 22:49:00
reiner
hallo,
das funktioniert leider nicht;
Fehlermeldung: Laufzeitfehler "1004":
Die Methode'Range! für das Oblekt '_Global' ist fehlgeschlagen
BereichAnfang und BereichEnde sind Variablen!
Die Betreffzeile sollte eigentlich richtig lauten: ComboBox befüllen
mfg
reiner
Anzeige
AW: ComboBox befüllen
27.08.2008 23:14:00
Uduuh
Hallo,

BereichAnfang und BereichEnde sind Variablen!


welchen Typs?
Gruß aus’m Pott
Udo

AW: ComboBox befüllen
27.08.2008 23:15:00
Ramses
Hallo
du sagst nicht WAS in der Variable "BereichAnfang" und "BereichEnde" steht.
Sind das nur die Zeilennummern, dann so
For Each Zelle In Range("D" & BereichAnfang & ":D" & BereichEnde)
Ist "BereichAnfang" und "BereichEnde" mit der Set-Methode als Range definiert
Set bereichanfang = Range("D1")
und NUR als einzelne Zelle, dann so
For Each Zelle In Range(BereichAnfang.Address(0,0) & ":" & BereichEnde.Address(0,0))
Gruss Rainer
Anzeige
Hallo Udo und Ramses
27.08.2008 23:25:13
reiner
ich habe eine Lösung gefunden
mit:

For Each Zelle In Range(Cells(BereichAnfang, 4), Cells(BereichEnde, 4))
If Zelle.Text  0 Then
frmGesprächszeit.cboDatum.AddItem Zelle.Offset(0, 0).Text & "  " & Zelle.Offset(0,  1). _
Text
cbodatumEinträge = cboDatum.ListCount
End If
Next


werden die Datendätze wie gewünscht nur in dem von "BereichAnfang" bis "BereichEnde" definierten Zeilen eines gewählten Jahres eingelesen.
Danke für eure Unterstützung
reiner

Anzeige
AW: @Ramses
27.08.2008 23:34:36
Erich
Hi Rainer und Reiner,
statt
For Each Zelle In Range(BereichAnfang.Address(0,0) & ":" & BereichEnde.Address(0,0))
ginge auch einfach
For Each Zelle In Range(BereichAnfang, BereichEnde)
(Ist für Reiner nicht mehr interessant, da BereichAnfang, BereichEnde ohnehin Long-Variablen sind
und seine Range(Cells(...))-Lösung gut passt.)
Nur noch ein Tipp:
"Zelle" würde ich nicht als Variablennamen verwenden, eher z. B. "rngZ". (Danach sucht sichs auch besser...)
Zelle ist ein von Excel belegter Begriff (Funktion ZELLE).
Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: @Ramses
27.08.2008 23:42:00
Ramses
Hallo
Klar ginge das, da er aber ohnehin so komisch adressierte, dachte ich er würde es leichter verstehen.
"..und seine Range(Cells(...))-Lösung gut passt.).."
Woher auch immer die jetzt gekommen ist :-(
Gruss Rainer
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

For Each Zelle In Range: Excel VBA für die ComboBox-Befüllung


Schritt-für-Schritt-Anleitung

  1. Definiere die Variablen: Stelle sicher, dass BereichAnfang und BereichEnde korrekt definiert sind. Diese sollten im besten Fall als Long-Variablen oder als Range-Objekte gesetzt werden.

    Dim BereichAnfang As Long
    Dim BereichEnde As Long
  2. Implementiere die For Each Schleife: Verwende die For Each Schleife, um durch den definierten Bereich zu iterieren und die gewünschten Daten zu extrahieren.

    For Each Zelle In Range(Cells(BereichAnfang, 4), Cells(BereichEnde, 4))
        If Zelle.Text <> 0 Then
            frmGesprächszeit.cboDatum.AddItem Zelle.Offset(0, 0).Text & "  " & Zelle.Offset(0, 1).Text
        End If
    Next Zelle
  3. Füge die ComboBox hinzu: Stelle sicher, dass die ComboBox (cboDatum) auf dem UserForm existiert.


Häufige Fehler und Lösungen

  • Laufzeitfehler "1004": Dieser Fehler tritt häufig auf, wenn der Bereich nicht korrekt definiert wurde. Überprüfe, ob BereichAnfang und BereichEnde gültige Zeilennummern sind.

  • Fehler beim Typ: Achte darauf, dass BereichAnfang und BereichEnde den richtigen Datentyp haben. Wenn sie als Range-Objekte definiert sind, kannst du sie direkt in der For Each Schleife verwenden.


Alternative Methoden

Eine alternative Methode zur Verwendung von For Each ist die Verwendung einer traditionellen For Schleife, um durch die Zeilen zu iterieren:

Dim i As Long
For i = BereichAnfang To BereichEnde
    If Cells(i, 4).Text <> 0 Then
        frmGesprächszeit.cboDatum.AddItem Cells(i, 4).Text & "  " & Cells(i, 5).Text
    End If
Next i

Diese Methode kann in bestimmten Situationen effizienter sein, insbesondere bei großen Datenmengen.


Praktische Beispiele

  1. Beispiel für die Verwendung von Variablen: Wenn BereichAnfang auf 2 und BereichEnde auf 10 gesetzt ist, wird das Skript die Werte aus den Zellen D2 bis D10 in die ComboBox einfügen.

  2. Verwendung von Checkboxen: Du kannst Checkboxen verwenden, um zu bestimmen, welche Jahrgänge in die ComboBox aufgenommen werden sollen. Setze die Werte in BereichAnfang und BereichEnde basierend auf der Auswahl der Checkboxen.


Tipps für Profis

  • Verwende aussagekräftige Variablennamen wie rngZ anstelle von Zelle, um Verwirrung mit Excel-Funktionen zu vermeiden.
  • Optimiere deine Schleifen, indem du nur die erforderlichen Daten abrufst, um die Leistung zu steigern.
  • Nutze die Option Explicit Direktive, um sicherzustellen, dass alle Variablen deklariert sind, was die Fehlersuche erleichtert.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen For Each und einer klassischen For Schleife?
For Each ist ideal, wenn du durch Objekte wie Zellen iterieren möchtest, während For nützlich ist, um eine bestimmte Anzahl von Iterationen durchzuführen.

2. Wie kann ich eine ComboBox in einem UserForm befüllen?
Nutze die AddItem Methode innerhalb einer Schleife, um die gewünschten Werte hinzuzufügen.

3. Warum erhalte ich einen Laufzeitfehler bei der Verwendung von Range?
Stelle sicher, dass die Variablen BereichAnfang und BereichEnde korrekt definiert sind und gültige Werte enthalten.

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