Excel: VBA-Makro endet bei ext. Dateien vorzeitig

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 :smile:
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 :smile:

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