ScreenUpdating in Excel VBA optimieren
Schritt-für-Schritt-Anleitung
- Starte das Makro: Beginne mit dem Setzen von
Application.ScreenUpdating = False
, um das Bildschirmflackern zu reduzieren.
- Führe deine Berechnungen durch: Stelle sicher, dass du deine Berechnungen effizient durchführst, um lange Laufzeiten zu vermeiden.
- Setze das Bildschirm-Update zurück: Am Ende des Makros solltest du
Application.ScreenUpdating = True
verwenden.
- Überprüfe andere Einstellungen: Nutze
Application.EnableEvents = False
und Application.Calculation = xlCalculationManual
, um die Performance zu steigern.
- Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um sicherzustellen, dass das Bildschirm-Update immer wieder auf True gesetzt wird, selbst wenn ein Fehler auftritt.
Häufige Fehler und Lösungen
- Flackern trotz
ScreenUpdating = False
: Dies kann passieren, wenn andere Prozesse oder Add-Ins im Hintergrund aktiv sind. Prüfe, ob Add-Ins geladen sind, die das Verhalten beeinflussen könnten.
- Code wird vorzeitig abgebrochen: Wenn dein Code aufgrund eines Fehlers abbricht, stelle sicher, dass
Application.ScreenUpdating
am Ende der Prozedur auf True gesetzt wird. Füge eine Fehlerbehandlung ein, um dies zu gewährleisten.
- Verwendung von
Select
oder Activate
: Vermeide diese Methoden, da sie oft zu unnötigem Flackern führen. Verwende stattdessen direkte Zellreferenzen.
Alternative Methoden
- Optimierter Code: Anstatt das gesamte Makro mit
Application.ScreenUpdating = False
zu versehen, teste eine optimierte Version, die die Bildschirmaktualisierung nicht vollständig deaktiviert. Beispiel:
Sub OptimizedCellsSetDate()
Dim Datum As Date
Datum = Now()
With Selection.Cells.SpecialCells(xlCellTypeVisible)
.NumberFormat = "dd/mm/yyyy hh:mm;@"
.Value = Datum
End With
End Sub
- Auslagerung von Code: Verwende Unterroutinen, um Code modular zu halten und den Bildschirm-Refresh gezielt zu steuern.
Praktische Beispiele
Hier ist ein Beispiel für ein einfaches Makro, das das Bildschirmflackern vermeidet:
Sub CellsSetDate()
Dim c As Range
Dim strDate As String
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
strDate = CDate(Format(Now, "DD.MM.YYYY hh:mm"))
For Each c In Selection
If c.EntireRow.Hidden = False Then
c.NumberFormat = "dd/mm/yyyy hh:mm;@"
c.Value = strDate
End If
Next c
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub
Dieses Beispiel zeigt, wie du ScreenUpdating
effektiv nutzen kannst, um das Flackern zu minimieren.
Tipps für Profis
- Nutze
With
-Anweisungen: Dies reduziert die Anzahl der Bildschirmaktualisierungen und erhöht die Effizienz.
- Überprüfe Add-Ins: Wenn du Probleme mit dem Flackern hast, deaktiviere Add-Ins, um sicherzustellen, dass sie nicht stören.
- Teste in verschiedenen Excel-Versionen: Manchmal kann das Verhalten in verschiedenen Versionen von Excel variieren (z.B. Excel 2003, 2007 oder 2010).
FAQ: Häufige Fragen
1. Warum flackert mein Bildschirm trotz Application.ScreenUpdating = False
?
Es kann an aktiven Add-Ins oder an einem Fehler im Code liegen. Überprüfe, ob Add-Ins geladen sind, die das Verhalten beeinflussen könnten.
2. Wie kann ich sicherstellen, dass ScreenUpdating
immer zurückgesetzt wird?
Implementiere eine Fehlerbehandlung, die sicherstellt, dass Application.ScreenUpdating = True
gesetzt wird, selbst wenn ein Fehler auftritt.
3. Ist es besser, das Bildschirm-Update nur einmal zu deaktivieren?
Ja, setze Application.ScreenUpdating
nur einmal am Anfang und am Ende der Prozedur, um die Effizienz zu maximieren.