Wer kann mir sagen, wie das mit VBA geht?
Vielen Dank im voraus.
Wer kann mir sagen, wie das mit VBA geht?
Vielen Dank im voraus.
In diesem Beispiel wird gezeigt, wie das Deaktivieren der Bildschirmaktualisierung die Ausführung des Makros beschleunigt. Jede zweite Spalte in Tabelle1 wird ausgeblendet, während die für diese Operation benötigte Zeit gespeichert wird. Beim ersten Schleifendurchlauf werden die Spalten ausgeblendet, die Bildschirmaktualisierung ist aktiviert. Beim zweiten Durchlauf ist die Bildschirmaktualisierung deaktiviert. Wenn Sie das Makro ausführen, haben Sie die Möglichkeit, die beiden in einem Meldungsfeld angezeigten Zeiten zu vergleichen.
Dim AbgelaufeneZeit(2)
Application.ScreenUpdating = True
For i = 1 To 2
If i = 2 Then Application.ScreenUpdating = False
ZeitStart = Time
Worksheets("Tabelle1").Activate
For Each c In ActiveSheet.Columns
If c.Column Mod 2 = 0 Then
c.Hidden = True
End If
Next c
ZeitEnde = Time
AbgelaufeneZeit(i) = (ZeitEnde - ZeitStart) * 24 * 60 * 60
Next i
Application.ScreenUpdating = True
MsgBox "Bei aktivierter Bildschirmaktualisierung benötigte Zeit: " & AbgelaufeneZeit(1) & _
" Sek." & Chr(13) & _
"Bei deaktivierter Bildschirmaktualisierung benötigte Zeit: " & AbgelaufeneZeit(2) & _
" Sek."
Um die Bildschirmaktualisierung in VBA auszuschalten, kannst Du den Befehl Application.ScreenUpdating verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:
Öffne den VBA-Editor: Drücke ALT + F11 in Excel, um den Visual Basic for Applications (VBA) Editor zu öffnen.
Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeinDateiname)" > Einfügen > Modul.
Gib den folgenden Code ein:
Sub BeispielScreenUpdate()
Dim ZeitStart As Double, ZeitEnde As Double
Dim AbgelaufeneZeit(1 To 2) As Double
' Bildschirmaktualisierung aktivieren
Application.ScreenUpdating = True
' Erster Durchlauf mit aktivierter Aktualisierung
ZeitStart = Timer
' Hier kannst Du Deine Operationen einfügen
Application.ScreenUpdating = True
ZeitEnde = Timer
AbgelaufeneZeit(1) = ZeitEnde - ZeitStart
' Bildschirmaktualisierung deaktivieren
Application.ScreenUpdating = False
' Zweiter Durchlauf mit deaktivierter Aktualisierung
ZeitStart = Timer
' Hier kannst Du Deine Operationen einfügen
Application.ScreenUpdating = False
ZeitEnde = Timer
AbgelaufeneZeit(2) = ZeitEnde - ZeitStart
' Ergebnis anzeigen
MsgBox "Aktivierte Aktualisierung: " & AbgelaufeneZeit(1) & " Sekunden" & vbCrLf & _
"Deaktivierte Aktualisierung: " & AbgelaufeneZeit(2) & " Sekunden"
' Bildschirmaktualisierung wieder aktivieren
Application.ScreenUpdating = True
End Sub
Führe das Makro aus: Drücke F5, um das Makro auszuführen und die Zeiten zu vergleichen.
Fehler: "Anwendungsdefinierter Fehler"
Application.ScreenUpdating korrekt geschrieben ist. Achte darauf, dass Du die Aktualisierung nur vor und nach der gewünschten Operation ein- oder ausschaltest.Fehler: Bildschirm flimmert trotzdem
Eine alternative Methode, um die Bildschirmaktualisierung in Excel VBA zu steuern, ist die Verwendung von @ echo off. Während dieser Befehl nicht direkt in VBA existiert, kannst Du die Logik hinter echo off umsetzen, indem Du die Benutzeroberfläche während der Ausführung verbirgst oder minimierst.
Hier ist ein Beispiel, wie Du die Bildschirmaktualisierung in einem größeren Kontext verwenden kannst:
Sub DatenVerarbeitung()
Application.ScreenUpdating = False
' Datenverarbeitende Operationen hier
Application.ScreenUpdating = True
End Sub
In diesem Code wird die Bildschirmaktualisierung während der gesamten Datenverarbeitung deaktiviert, um die Geschwindigkeit zu erhöhen und ein flimmerndes Verhalten zu vermeiden.
Application.Calculation = xlCalculationManual, um die Berechnung in Excel während der Ausführung von Makros zu deaktivieren. Dies kann zusätzlich die Performance verbessern.DoEvents, um sicherzustellen, dass Excel nicht einfriert, während Du die Bildschirmaktualisierung ausgeschaltet hast.1. Was bewirkt der Befehl Application.ScreenUpdating?
Der Befehl steuert, ob Excel die Bildschirmaktualisierung während der Makroausführung anzeigt oder nicht. Durch das Deaktivieren wird die Ausführung beschleunigt.
2. Gibt es eine Möglichkeit, die Bildschirmaktualisierung für bestimmte Bereiche auszuschalten?
Nein, die Bildschirmaktualisierung gilt immer für das gesamte Excel-Fenster. Du kannst jedoch spezifische Operationen innerhalb eines Makros steuern, um die Performance zu verbessern.
3. Wie kann ich sicherstellen, dass die Bildschirmaktualisierung am Ende meines Makros wieder aktiviert ist?
Setze Application.ScreenUpdating = True am Ende Deines Makros, um sicherzustellen, dass die Aktualisierung wieder aktiviert wird, auch wenn ein Fehler auftritt. Es ist ratsam, dies in einem Finally-Block oder mit On Error zu kombinieren.