PDA

Vollständige Version anzeigen : Leerzeilen entfernen bremst


Andreas70
30.04.2009, 12:14
Hallo, ich habe ein Problem bei einem Makro, das mit Jinxs Hilfe erstellt wurde. Und zwar werden von dem Teil des Scripts die Leeren Zeilen vor dem Ausdruck entfernt und dies bremst die Ausführung des gesamten Makros von wenigen Sekundenbruchteilen auf mehrere Minuten je nach Rechner. Bei unter 200 Zeilen ist es nicht so aufgefallen aber wenn es mal mehr Zeilen (500) sind wird es sehr deutlich. Der Skriptteil ist so aufgebaut

For Each rngCell In Range("Y15:Y499").SpecialCells(xlCellTypeBlanks)
rngCell.EntireRow.Hidden = True
Next rngCell

Woran kann das liegen? Die CPU geht hier bis zu 100% Auslastung.
Wenn es tatsächlich an der Art der Abarbeitung liegt gibt es eine andere Möglichkeit dies zu beschleunigen. Dachte so in der Art letzte leere Zeile finden.

Cells(65000, 2).End(xlUp).Offset(1, 0).Select

und dann mit einer Variante von

ActiveCell.EntireRow.Hidden

von gefundener erster leerer Zeile bis, in dem Fall Y499 alle ausblenden.
Einzelne Leere Zeilen zwischen den ausgefüllten dürfte es eigentlich keine geben aber wenn mal eine dabei wäre wäre das kein Problem die muss nicht ausgeblendet werden. Es geht nur darum beim Ausdruck nicht immer auch 10 Seiten mit leeren Zellen mitzudrucken.

Danke für eure Hilfe
Andreas

Melanie Breden
30.04.2009, 12:29
Hallo Andreas,

die Schleife ist total überflüssig, weil das Ausblenden der Zeilen
auch auf einen Bereich angewendet werden kann:

Range("Y15:Y499").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True

chris-kaiser
30.04.2009, 12:54
Hallo Andreas

hier noch ein Code der eine komplette Tabelle durchsucht
dort LeerZEILEN
entfernt

Sub leerzeilen()
Dim thebigone As Range
Dim lngLastcell As Long, lngCount As Long
lngLastcell = Cells.SpecialCells(xlCellTypeLastCell).Row
For lngCount = 1 To lngLastcell
If WorksheetFunction.CountA(Rows(lngCount)) = 0 Then
If thebigone Is Nothing Then
Set thebigone = Rows(lngCount)
Else
Set thebigone = Union(thebigone, Rows(lngCount))
End If
End If
Next
If Not thebigone Is Nothing Then thebigone.Delete
Set tehebigone = Nothing
End Sub


bzw. auch ausblenden kann

Sub leerzeilen()
Dim thebigone As Range
Dim lngLastcell As Long, lngCount As Long
lngLastcell = Cells.SpecialCells(xlCellTypeLastCell).Row
For lngCount = 1 To lngLastcell
If WorksheetFunction.CountA(Rows(lngCount)) = 0 Then
If thebigone Is Nothing Then
Set thebigone = Rows(lngCount)
Else
Set thebigone = Union(thebigone, Rows(lngCount))
End If
End If
Next
If Not thebigone Is Nothing Then thebigone.EntireRow.Hidden = True
Set tehebigone = Nothing
End Sub



müsste auch recht flott gehen

ansonsten reicht natürlich das was Melanie gepostet hat
die schleife ist unnötig.

Andreas70
30.04.2009, 14:20
Hallo Melanie, Chris! Danke für die schnellen Antworten. Habe die Schleife durch die Zeile ersetzt und es ist keine Verzögerung mehr merkbar, das ganze Makro läuft jetzt in sekundenbruchteilen ab, wie es sein soll.