Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1588to1592
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
Inhaltsverzeichnis

Fehlersuche: Letzte Zeile wird nicht berücksichtig

Fehlersuche: Letzte Zeile wird nicht berücksichtig
15.11.2017 14:03:44
Hase
Hallo Zusammen,
ich bräuchte mal alle Augen, um den Fehler zu finden.
Mit folgendem Code trenne ich den Inhalt von Zellen mit mehr als 110 Zeichen. Falls die Bedingung mit > 110 in der letzten Zeile meines Tabellenblattes auftaucht, wird nichts gemacht. Also meinem Kenntnisstand nach muss ich den Zähler myRowB wieder zurücksetzen, ich find die Stelle aber nicht. Egal wo ich myRowB= myRowB - 1 einsetze, die letzte Zeile wird missachtet.
Wisst ihr woran das liegt?

myLastRowB = .Cells(Rows.Count, 6).End(xlUp).Row
For myRowB = 32 To myLastRowB
t2 = .Cells(myRowB, 2)
If Len(.Cells(myRowB, 2)) > 110 Then
.Cells(myRowB, 2).EntireRow.Select
Selection.Copy
Selection.Insert Shift:=xlUp
.Cells(myRowB, 2) = Split(t2, Chr(10))(0)
.Cells(myRowB, 2).Interior.Color = vbGreen
.Cells(myRowB + 1, 2) = Split(t2, Chr(10))(3)
.Cells(myRowB + 1, 2).Interior.Color = vbBlue
Else
.Cells(myRowB, 2) = Split(t2, Chr(10))(0)
End If
Next myRowB
Vielen vielen Dank!

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlersuche: Letzte Zeile wird nicht berücks.
15.11.2017 14:19:20
Daniel
Hi
in der For-Next-Schleife ist der Schleifenendwert mit beginn der Schleife auf diesen Endwert fixert und nachträglich nicht mehr veränderbar.
Wenn du jedoch Zeilen einfügst, dann verschieben sich ja die restlichen Zeilen nach unten und fallen somit aus dem Bereich heraus, den die Schleife durchläuft.
die gängige Lösung wäre hier, die Schleife rückwärts, dh von myLastRowB bis 32 mit Step -1 laufen zu lassen, weil sich dann diese Verschiebungen nur in dem Bereich auswirken, der schon bearbeitet wurde.
oder du arbeitest nicht mit For-Next sondern mit DO-Until
hier könntest du den Endwert jedesmal um 1 erhöhen, wenn du eine Zeile einfügst.

myLastRowB = .Cells(Rows.Count, 6).End(xlUp).Row
myRowB  = 32
Do until myRowB > myLastRowB
t2 = .Cells(myRowB, 2)
If Len(.Cells(myRowB, 2)) > 110 Then
.Cells(myRowB, 2).EntireRow.Select
Selection.Copy
Selection.Insert Shift:=xlUp
.Cells(myRowB, 2) = Split(t2, Chr(10))(0)
.Cells(myRowB, 2).Interior.Color = vbGreen
.Cells(myRowB + 1, 2) = Split(t2, Chr(10))(3)
.Cells(myRowB + 1, 2).Interior.Color = vbBlue
'--- Schleifenendwert erhöhen
myLastRowB = myLastRowB + 1
Else
.Cells(myRowB, 2) = Split(t2, Chr(10))(0)
End If
'--- Schleifenzähler erhöhen
myRowB = myRowB + 1
Loop
Gruß Daniel
Anzeige
AW: Fehlersuche: Letzte Zeile wird nicht berücksichtig
15.11.2017 14:23:03
PeterK
Hallo
Dein Problem liegt nicht am Schleifenzähler myRowB sondern am Ende Kriterium myLastRowB. Beispiel: Datei hat 100 Zeilen daher läuft deine Schleife von 32 bis 100. Fügst Du aber ein neue Zeile ein, hat die neue Datei 101 Zeilen, Deine Schleife stoppt aber bei 100.
AW: Fehlersuche: Letzte Zeile wird nicht berück
15.11.2017 18:31:08
Hase
Hallo Daniel,
Hallo PeterK,
vielen Dank für die Antwort. Klingt absolut logisch. Hatte bisher immer nur Fälle in denen Zeilen gelöscht werden müssen, macht aber absolut Sinn, dass VBA die letzten Reihen gar nicht berücksichtigen kann. Der Fehler sitzt halt doch meist vor dem Rechner :).
Beide Lösungen funktionieren super! Wieder was dazu gelernt!
Danke euch!
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige