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

Forumthread: Kann eine Schleife auch rueckwaerts laufen?

Kann eine Schleife auch rueckwaerts laufen?
abu
Hallo Zusammen,
habe nachstehende Schleife die auf eine gefilterte Tabelle alle sichtbaren Zeilen durchlaeuft und mir fuer jede Zeile eine UserForm oeffnet in der der User eine Eingabe macht. Soweit funktioniert alles.
Nun ist die Anforderung einen Button zu installieren die dem User die Moeglichkeit gibt die Zeile vorher noch einmal aufzurufen. Habe im Moment keine Idee wie sich das umsetzen laesst.
Wuerde mich ueber Hilfe freuen.
Gruesse
abu
Set oFilter = CreateObject("Scripting.dictionary")
For Each rngG In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
oFilter(rngG.Value) = rngG.Value
Next
ar = oFilter.Keys
For i = 0 To UBound(ar)
Selection.AutoFilter Field:=1, Criteria1:=ar(i)
leZeile = CLng(Range(ActiveSheet.Range("A:A").Find(What:="*", _
After:=Range("A65536"), LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Address).Row)
If leZeile 1 Then
With ActiveSheet.UsedRange
Set rngFilter = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
.SpecialCells(xlCellTypeVisible)
End With
With ActiveSheet
For Each rngArea In rngFilter
For lngRow = 1 To rngArea.Rows.Count
'sichtbare Zeile in Filterung
Daily.TextBox7.Value = .Cells(rngArea.Row, 33).Value
Daily.TextBox1.Value = .Cells(rngArea.Row, 34).Value
Daily.TextBox3.Value = .Cells(rngArea.Row, 2).Value
Daily.TextBox4.Value = .Cells(rngArea.Row, 1).Value
Daily.TextBox5.Value = .Cells(rngArea.Row, 4).Value
MeineZeile = rngArea.Row
If WorkSheetExists("Daily") Then
Worksheets("Daily").Activate
End If
Daily.Show
Next lngRow
Next rngArea
End With
End If
Next
Anzeige
AW: Kann eine Schleife auch rueckwaerts laufen?
28.10.2010 11:01:52
ede
Hallo,
ja du kannst eine Schleife auch rückwärts laufen lassen.
for i=99 to 1 step -1
gruss
Vorwaertsschleife soll auch rueckwaerts laufen
28.10.2010 11:10:54
abu
Hallo Ede,
danke fuer Deine Antwort. Hab wieder etwas dazugelernt. Aber das ist leider kein Loesungsansatz fuer mein Problem, oder?
Die Frage muss wohl lauten: Kann man innerhalb einer Schleife auch den Rueckwaertsgang einlegen?
Gruss
Abu
Anzeige
AW: Vorwaertsschleife soll auch rueckwaerts laufen
28.10.2010 11:16:57
ede
dann setz den zähler (i) doch einfach innerhalb der Schleife um eins zurück.
for i=1 to 9
wenn bedingung, dann i=i-1
next i
AW: Vorwaertsschleife soll auch rueckwaerts laufen
28.10.2010 12:06:55
abu
Hallo Ede,
das i setzt in meinem Code nur die einzelnen Filter. Er durchlaeuft erst alle sichtbaren Zeilen. liest alle unterschiedlichen Laenderkuerzel ein und setzt dann nacheinander die Filter fuer die unterschiedlichen Laenderkuerzel.
Set oFilter = CreateObject("Scripting.dictionary")
For Each rngG In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
oFilter(rngG.Value) = rngG.Value
Next
ar = oFilter.Keys
For i = 0 To UBound(ar)
Selection.AutoFilter Field:=1, Criteria1:=ar(i)
Dann wird die Userform fuer jede Zeile geoeffnet:
For Each rngArea In rngFilter
For lngRow = 1 To rngArea.Rows.Count
Wie spreche ich denn nun die vorherige sichtbare Zeile an und was mach ich wenn ich in der ersten Zeile von z.B. Filter auf "NL" bin, ich aber zurueckwill zur letzten sichtbaren Zeile von Filter auf "BE" muss?
Ich glaube so einfach wie Du meinst ist das nicht.
Gruss
Abu
Anzeige
AW: Vorwaertsschleife soll auch rueckwaerts laufen
28.10.2010 12:29:19
ede
Hallo noch mal,
ohne Beispiel ist das natürlich schwer nachzuvollziehen. Habe versucht, dir das mehr logisch zu vermitteln.
Ich würde die Filter in die Userform einbauen, sodass der Anwender selber jederzeit die Filter setzen und die entsprechenden Einträge bearbeiten kann. Somit hast Du das Problem nicht mehr.
Gruss
Anzeige
AW: Vorwaertsschleife soll auch rueckwaerts laufen
28.10.2010 12:54:15
abu
Hallo Ede,
ja ist glaub ich schwer nachzuvollziehen wenn man nicht weiss wie das ganze aussieht und welcher zweck dahinter steckt. Kann das hier leider nicht hochladen, wenn Du Lust hast dich damit auseinanderzusetzen, dann kann ich es schicken.
Gruss abu
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Schleifen in Excel VBA: Rückwärts durch die Daten


Schritt-für-Schritt-Anleitung

Um eine VBA For Schleife rückwärts zu implementieren, kannst du den folgenden Code verwenden. Dieser Code demonstriert, wie du durch eine gefilterte Tabelle rückwärts iterieren kannst:

Sub SchleifeRückwärts()
    Dim i As Long
    Dim rng As Range
    Dim letzteZeile As Long

    letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row

    For i = letzteZeile To 1 Step -1
        If Not Rows(i).Hidden Then
            ' Hier kannst du deine Logik für die sichtbaren Zeilen einfügen
            Debug.Print Cells(i, 1).Value
        End If
    Next i
End Sub

In diesem Beispiel wird durch die Zeilen der ersten Spalte iteriert, beginnend bei der letzten Zeile und zurück bis zur ersten Zeile. Achte darauf, dass der Code nur für sichtbare Zeilen ausgeführt wird.


Häufige Fehler und Lösungen

  1. Fehler: Schleife durch versteckte Zeilen

    • Lösung: Stelle sicher, dass du die Bedingung If Not Rows(i).Hidden Then in deine Schleife einfügst, um nur sichtbare Zeilen zu verarbeiten.
  2. Fehler: Endlos-Schleife

    • Lösung: Überprüfe die Schleifenbedingung. Achte darauf, dass der Startwert der Schleife korrekt ist und die Schleifenrichtung (Step -1) richtig gesetzt ist.

Alternative Methoden

Eine alternative Methode zur Verwendung der for schleife rückwärts ist die Verwendung von Do While-Schleifen. Hier ein Beispiel:

Sub SchleifeMitDoWhile()
    Dim i As Long
    Dim letzteZeile As Long

    letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
    i = letzteZeile

    Do While i >= 1
        If Not Rows(i).Hidden Then
            ' Hier kannst du deine Logik für die sichtbaren Zeilen einfügen
            Debug.Print Cells(i, 1).Value
        End If
        i = i - 1
    Loop
End Sub

Diese Methode kann hilfreich sein, wenn du flexiblere Bedingungen in der Schleife benötigst.


Praktische Beispiele

Ein häufiges Szenario ist das Bearbeiten von sichtbaren Zeilen in einer gefilterten Tabelle. Hier ein Beispiel, das die Werte in den Textfeldern einer UserForm setzt:

Sub BearbeiteSichtbareZeilen()
    Dim i As Long
    Dim rng As Range
    Dim letzteZeile As Long

    letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row

    For i = letzteZeile To 1 Step -1
        If Not Rows(i).Hidden Then
            ' Werte aus der Tabelle setzen
            Daily.TextBox1.Value = Cells(i, 1).Value
            Daily.TextBox2.Value = Cells(i, 2).Value
            Daily.Show
        End If
    Next i
End Sub

Hier wird durch die Tabelle iteriert, und für jede sichtbare Zeile wird die UserForm mit den entsprechenden Werten aktualisiert.


Tipps für Profis

  • Nutze die Application.ScreenUpdating-Eigenschaft, um das Flackern des Bildschirms während der Schleifenverarbeitung zu minimieren:

    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True
  • Achte darauf, dass du die Schleifenbedingung klar und deutlich formulierst, um Missverständnisse zu vermeiden. Verwende Kommentare, um den Code nachvollziehbar zu machen.


FAQ: Häufige Fragen

1. Kann ich eine For Schleife rückwärts in einer UserForm verwenden?
Ja, du kannst eine rückwärts laufende Schleife in einer UserForm verwenden, um Eingaben für sichtbare Zeilen zu verarbeiten.

2. Was passiert, wenn ich die Bedingung in der Schleife ändere?
Wenn du die Bedingung in der Schleife änderst, kann dies die Iteration beeinflussen und möglicherweise zu einer Endlosschleife führen, wenn die Bedingungen nicht korrekt gesetzt sind. Achte darauf, dass die Schleifenlogik klar ist.

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