VBA Excel 2007 hilft, Code zum Ausblenden von Zeilen zu beschleunigen

VBA Excel 2007 hilft, Code zum Ausblenden von Zeilen zu beschleunigen

Ich versuche, einen VBA-Code zu schreiben, der Zeilen automatisch ausblendet, wenn ein Wert in der Zeile gleich "" ist. Mein Wertebereich ist A37:A400. Da mein Bereich so groß ist, ist mein bisheriges VBA zu langsam und durchsucht jeweils eine Zeile. Irgendwelche Ideen, um einen schnellen Code zu erstellen, der diese große Liste durchgeht und Zeilen schnell ausblendet? Im Moment dauert es etwa eine Minute, um die Zeilen auszublenden, was zu lang ist.

Sub HideRows()
    Dim cell As Range
    For Each cell In Range("A37:A400")
        If Not IsEmpty(cell) Then
            If cell.Value = "" Then
                cell.EntireRow.Hidden = True
            End If
        End If
    Next
End Sub

Antwort1

Versuchen Sie, es Application.ScreenUpdating = Falsedirekt vor Ihrem versteckten Code und Application.ScreenUpdating = Truedanach hinzuzufügen. Normalerweise beschleunigt dieser Trick die meisten VBA-Makros um das Zehnfache, da die Anwendung sich während der Ausführung des Codes nicht ständig neu zeichnen muss.

Dies sollte in Ihrem Fall hilfreich sein, da Sie jede Zelle einzeln prüfen und die Zeile einzeln ausblenden, anstatt mehrere Zeilen stapelweise auszublenden.

Antwort2

Ich verstehe nicht einmal, wie Ihr Code funktioniert.

Sie haben die folgenden 2 Zeilen

If Not IsEmpty(cell) Then
        If cell.Value = "" Then

Wenn die erste Zeile nicht leer ist, gibt die zweite Zeile immer „false“ zurück. Die erste Zeile sagt „wenn die Zelle nicht leer ist“ und die nächste Zeile sagt „wenn die Zeile leer ist“... Nun, es wurde bereits ausgewertet, dass sie nicht leer ist. Daher sollten Sie die Zeile nie ausblenden können, daher weiß ich nicht, wie Ihr Code funktioniert – ich vermute, dass außerhalb des Codes noch etwas anderes passiert, aber...

Dies funktioniert jedoch auf meinem Rechner einwandfrei

Sub Button1_Click()
Dim cell As Range
    For Each cell In Range("A1:A1600")
        If cell.Value = "" Then
            cell.EntireRow.Hidden = True
        End If            
    Next
End Sub

Ich habe 1600 Zeilen, die Ausführung dauert etwa 5 Sekunden

verwandte Informationen