EXCEL - VBA For-Schleifen Problem
Meine For-Schleife läuft trotz Überschreitung der Prüfwerte einfach weiter !?!
Hello
und zwar habe ich folgenden Code:
Private Sub Daten_bereinigen()
Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Activate
Dim AktuelleZelle As Long
Dim LetzteZelle As Long
LetzteZelle = Cells(Rows.Count, 1).End(xlUp).Row
For AktuelleZelle = 2 To LetzteZelle
If Not IsNull(Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Range("A" + Trim(Str(AktuelleZelle)))) Then
If IsEmpty(Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Range("A" + Trim(Str(AktuelleZelle)))) Then
If AktuelleZelle < LetzteZelle Then
LetzteZelle = Cells(Rows.Count, 1).End(xlUp).Row
Rows(AktuelleZelle).Delete
AktuelleZelle = AktuelleZelle - 1
End If
End If
End If
Next AktuelleZelle
End Sub
Mein Problem ist dass die For-Schleife nicht aufhört zu laufen,
obwohl ich bei jedem Durchlauf die LetzteZelle verringere
und die Aktuelle Zelle erhöhe.
Ich hoffe Ihr könnt mir hier helfen!
LG
Hello
und zwar habe ich folgenden Code:
Private Sub Daten_bereinigen()
Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Activate
Dim AktuelleZelle As Long
Dim LetzteZelle As Long
LetzteZelle = Cells(Rows.Count, 1).End(xlUp).Row
For AktuelleZelle = 2 To LetzteZelle
If Not IsNull(Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Range("A" + Trim(Str(AktuelleZelle)))) Then
If IsEmpty(Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Range("A" + Trim(Str(AktuelleZelle)))) Then
If AktuelleZelle < LetzteZelle Then
LetzteZelle = Cells(Rows.Count, 1).End(xlUp).Row
Rows(AktuelleZelle).Delete
AktuelleZelle = AktuelleZelle - 1
End If
End If
End If
Next AktuelleZelle
End Sub
Mein Problem ist dass die For-Schleife nicht aufhört zu laufen,
obwohl ich bei jedem Durchlauf die LetzteZelle verringere
und die Aktuelle Zelle erhöhe.
Ich hoffe Ihr könnt mir hier helfen!
LG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 145430
Url: https://administrator.de/contentid/145430
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Avalon1!
Den Wert der Schleifenvariablen oder den Endwert einer "laufenden" "
Neben einigen Vereinfachungen (das Tabellenblatt wird ja ohnehin schon vorweg aktiviert und muss deshalb nicht nochmals angegeben werden, und anstelle der "Zusammenbastelei" der Adresse für "
Grüße
bastla
P.S.: Hinsichtlich der Notwendigkeit der "
Den Wert der Schleifenvariablen oder den Endwert einer "laufenden" "
For-Next
"-Schleife zu verändern ist eigentlich niemals eine gute Idee - andere Schleifentypen eignen sich in solchen Fällen besser.Neben einigen Vereinfachungen (das Tabellenblatt wird ja ohnehin schon vorweg aktiviert und muss deshalb nicht nochmals angegeben werden, und anstelle der "Zusammenbastelei" der Adresse für "
Range
" bietet sich in solchen Fällen "Cells
" an) würde ich auf eine "Do-While
"-Schleife umstellen (die Variablennamen mit "Zelle" anstatt des eher entsprechenden "Zeile" habe ich beibehalten):Private Sub Daten_bereinigen()
Workbooks("Auswertung.xls").Worksheets("LKW-Walter_taegl").Activate
Dim AktuelleZelle As Long
Dim LetzteZelle As Long
LetzteZelle = Cells(Rows.Count, 1).End(xlUp).Row
AktuelleZelle = 2
Do While AktuelleZelle <= LetzteZelle
If Not IsNull(Cells(AktuelleZelle, "A")) Then
If IsEmpty(Cells(AktuelleZelle, "A")) Then
Rows(AktuelleZelle).Delete
LetzteZelle = LetzteZelle - 1
AktuelleZelle = AktuelleZelle - 1
End If
End If
AktuelleZelle = AktuelleZelle + 1
Loop
End Sub
bastla
P.S.: Hinsichtlich der Notwendigkeit der "
IsNull
"-Prüfung habe ich leichte Zweifel ...
Hallo Avalon1!
Ich würde als Eingabe des Monats einfach eine Zahl verlangen und dann daraus den Monatsnamen in der benötigten Form erzeugen - etwa so:
Das Ergebnis von "
Grüße
bastla
P.S.: Schön, dass Du nach der Formatierung als "" fragst ...
Ich würde als Eingabe des Monats einfach eine Zahl verlangen und dann daraus den Monatsnamen in der benötigten Form erzeugen - etwa so:
Sub Eingabe()
Do
OK = True
Abbruch = False
EingabeJahr = InputBox("Bitte eine Jahreszahl eingeben" & vbCrLf & vbCrLf & "Auswertung erst ab Jaenner 2010 moeglich!.", "Eingabe des Jahres (ab 2010 !!)")
If IsNumeric(EingabeJahr) Then 'Zahl für Jahr eingegeben?
Jahr = CInt(EingabeJahr)
If Jahr = 0 Then
Abbruch = True
Else 'Jahr nicht 0
If Jahr < 2010 Then
OK = False
Else 'Jahr mindestens 2010
Do 'Schleife Monatseingabe
OKMon = True
EingabeMonat = InputBox("Bitte eine Monatszahl (1 - 12) eingeben." & vbCrLf & vbCrLf, "Eingabe des Monat")
If IsNumeric(EingabeMonat) Then 'Zahl für Monat eingegeben?
Mon = CInt(EingabeMonat)
If Mon = 0 Then
Abbruch = True
Else 'Monat nicht 0
If Mon < 1 Or Mon > 12 Then
OKMon = False
Else 'Monat zwischen 1 und 12
Monat = Replace(MonthName(Mon), "ä", "ae")
End If
End If
Else 'keine Zahl für Monat eingegeben
OKMon = False
End If
Loop Until OKMon Or Abbruch
End If
End If
Else 'keine Zahl für Jahr eingegeben
OK = False
End If
Loop Until OK Or Abbruch
If Abbruch Then
MsgBox "Na gut, dann nicht ..."
Else
MsgBox "Gewählt: " & Monat & " " & Jahr
End If
End Su
... so oft Eingeben muss bis man "richtige" Werte gibt
Um nicht ganz so "brutal" zu sein: Bei Eingabe von "0" (für Jahr oder Monat) wird die Eingabeschleife abgebrochen (ein Hinweis in der "InputBox
" wäre dann auch noch sinnvoll) ...Das Ergebnis von "
MonthName()
" müsste eigentlich von der Ländereinstellung in der Systemsteuerung abhängig sein - kannst Du mit einer kleinen Schleife im Direktbereich kontrollieren:For i = 1 To 12: ? MonthName(i): Next
bastla
P.S.: Schön, dass Du nach der Formatierung als "" fragst ...