![VBA Excel 2007 hilft, Code zum Ausblenden von Zeilen zu beschleunigen](https://rvso.com/image/1395375/VBA%20Excel%202007%20hilft%2C%20Code%20zum%20Ausblenden%20von%20Zeilen%20zu%20beschleunigen%20.png)
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 = False
direkt vor Ihrem versteckten Code und Application.ScreenUpdating = True
danach 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