Hallo,
ich wollte mit folgendem VBA-Makro leere Zeilen löschen. Das funktioniert auch, aber nur solange das Makro in der betreffenden Excel-Datei selbst abgelegt ist. Will ich eine andere Datei entsprechend bearbeiten, funktioniert das nur für jeweils ein paar Zeilen und das Makro ist beendet. Starte ich das Makro neu, löscht es wieder ein paar leere Zeilen raus — man könnte sich durch mehrmaliges Durchklicken hangeln.
Warum aber endet das Makro bei anderen Excel-Dateien vorzeitig? Wie muß ich es umschreiben, damit es in anderen Excel-Dateien auch funktioniert? Sonst müßte ich es ja jedesmal über die VBA-Konsole hineinkopieren.
Sub LeerzeilenLoeschen()
Application.ScreenUpdating = False
Cells(1, 10) = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
Dim i As Long
For i = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then Rows(i).Delete
If i Mod 100 = 0 Then Application.StatusBar = i
Next
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
Vielen Dank und einen schönen Abend 
JayKay
Hallo,
Hi,
ich wollte mit folgendem VBA-Makro leere Zeilen löschen. Das
funktioniert auch, aber nur solange das Makro in der
betreffenden Excel-Datei selbst abgelegt ist. Will ich eine
andere Datei entsprechend bearbeiten, funktioniert das nur für
jeweils ein paar Zeilen und das Makro ist beendet. Starte ich
das Makro neu, löscht es wieder ein paar leere Zeilen raus —
man könnte sich durch mehrmaliges Durchklicken hangeln.
Warum aber endet das Makro bei anderen Excel-Dateien
vorzeitig? Wie muß ich es umschreiben, damit es in anderen
Excel-Dateien auch funktioniert? Sonst müßte ich es ja
jedesmal über die VBA-Konsole hineinkopieren.
Dein Makro verändert immer den Wert von i als Schleifenzähler, weil xlCellTypeLastCell sich durch das Löschen verändert.
ungetestet:
Sub LeerzeilenLoeschen()
Application.ScreenUpdating = False
Cells(1, 10) =
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
Dim i As Long
mach hier mal
i = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
und hier
for x = i to 1 step -1
If Application.WorksheetFunction.CountA(Rows(i)) = 0
Then Rows(i).Delete
If i Mod 100 = 0 Then Application.StatusBar = i
Next
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
Vielen Dank und einen schönen Abend 
Bitteschön
JayKay
Gruß, Bernd
Warum aber endet das Makro bei anderen Excel-Dateien
vorzeitig? Wie muß ich es umschreiben, damit es in anderen
Excel-Dateien auch funktioniert? Sonst müßte ich es ja
jedesmal über die VBA-Konsole hineinkopieren.
Dein Makro verändert immer den Wert von i als Schleifenzähler,
weil xlCellTypeLastCell sich durch das Löschen verändert.
Hallo Bernd,
das ist richtig, trotzdem klappert die For-Schleife alle gewünschten Zeilen ab. Das Problem des Anfragers muß eine andere Ursache haben.
In deinem Code muß in der For-Schleife noch i 4mal durch x ersetzt werden.
Gruß
Reinhard