Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ScreenUpDating: Funktioniert nicht richtig

Forumthread: ScreenUpDating: Funktioniert nicht richtig

ScreenUpDating: Funktioniert nicht richtig
Holger
Hallo,
ich verwende Application.Screenupdating, um das Bildschirmflackern zu unterdrücken.
Leider funktioniert es nicht richtig. Trotz keinerlei Verwendung von Select oder Activate,
flackert der Bildschirm. Am Anfang des Makros setze ich es auf False, am Ende auf True. Dies mache
ich in jedem Makro, das ich benutze. Zusätzlich verwende ich Applicatio.EnableEvents = False.
Das Makro ist zu lang, als dass es ernsthaft hier gepostet werde könnte, aber wie gesagt kein Select, kein Activate. An was kann es noch liegen? Application.Visible nöchte ich nicht verwenden, da es den User verwirren kann und im Error Fall die Anwendung ganz weg ist.
Hat jemand eine Idee?
Anzeige
so: Application.ScreenUpdating = False 'oder True
04.08.2010 08:34:40
JOWE
?
04.08.2010 08:40:11
Holger
Hallo und Guten Morgen,
Danke für dei Posting, aber wo ist die Antwort?
Wie man es auf False oder True setzt weiß ich doch?
AW: hattest Du im Posting aber nicht geschrieben
04.08.2010 08:42:48
JOWE
Anzeige
AW: hattest Du im Posting aber nicht geschrieben
04.08.2010 08:45:00
Holger
Guckst du hier, aber egal. Fällt Dir sonst nichts zu dem Problem ein?
"...Am Anfang des Makros setze ich es auf False, am Ende auf True. Dies mache
ich in jedem Makro, das ich benutze. Zusätzlich verwende ich Applicatio.EnableEvents = False..."
AW: hattest Du im Posting aber nicht geschrieben
04.08.2010 08:47:24
JOWE
ja, sorry!!
kannst Du die Datei hochladen?
Anzeige
AW: hattest Du im Posting aber nicht geschrieben
04.08.2010 08:57:20
Holger
Ich habe gerade unter meinem Beitrag einen kleinen Beispielcode gepostet.
Ich verstehe wirklich nicht, was es da zu flackern gibt.
Aber sieh selbst.
Hier ein Beispielcode, der flackert
04.08.2010 08:52:58
Holger
Hallo,
hier doch ein kleiner Beispielcode, der flackert:
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

Anzeige
AW: Hier ein Beispielcode, der flackert
04.08.2010 09:03:05
JOWE
Holger, hallo nochmal
hab den Code gerade unter XL2003 und XL2007 getestet.
Bei mir flackert da nix!
Gruß
Jochen
AW: Hier ein Beispielcode, der flackert
04.08.2010 09:30:44
Holger
Komisch, ich verstehe das dann nicht.
bei mir flackert nichts (Excel 2003 und 2010) owT
04.08.2010 09:03:45
JogyB
.
Anzeige
Hier ein alternativer Code
04.08.2010 09:49:20
Jürgen
Hallo Holger,
und wie wäre es mit etwas optimiertem Code - das beigefügte Beispiel läuft bei mir so schnell (auch bei komplett markierter Spalte), dass kein Unterschied sichtbar wird, wenn man die Bildschirmaktualisierung nicht ausschaltet. Ach ja, auch bei mir ist mit Deinem Code kein Flackern zu sehen - das mag aber auch an meiner kleinen Testdatei liegen.
Gruß, Jürgen
Sub CellsSetDate()
Dim Datum As Date
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Datum = Now()
With Selection.Cells.SpecialCells(xlCellTypeVisible)
.NumberFormat = "dd/mm/yyyy hh:mm;@"
.Value = Datum
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige
Flackert auch!
04.08.2010 09:54:33
Holger
Hallo,
Danke fuer deinen Code, ich habe ihn übernommen, allerdings flackert das genauso.
Vielleicht liegt es daran, weil das Makro aus einem Ribbon aufgerufen wird oder
weil in der Tabelle auch ein Bild enthalten ist? Mehr fällt mir nicht mehr ein.
Habs jetzt auch getestet, ohne Probl.
04.08.2010 10:39:23
Matthias
Hallo
Auch bei mir kein Flackern
Getestet mit XL2000 und XL2007
Übrigens wird ScreenUpdating am Ende der Prozedur automatisch auf True gesetzt.
Gruß Matthias
Anzeige
Da würde ich mich aber nicht drauf verlassen...
04.08.2010 11:06:14
Tino
Hallo,
Übrigens wird ScreenUpdating am Ende der Prozedur automatisch auf True gesetzt.
ich hatte es schon oft, dass ich in einer Datei nicht mehr navigieren konnte weil z. Bsp. ein unfertiger Code wegen eines Fehlers vorzeitig abgebrochen wurde.
Dann musste ich im Direktfenster erst wieder application.screenupdating = True eingeben
damit die Datei wieder auftaut.
Gruß Tino
Anzeige
im Prinzip geb ich Dir schon Recht ...
04.08.2010 11:23:44
Matthias
Hallo Tino
... aber wenn z. Bsp. ein unfertiger Code wegen eines Fehlers vorzeitig abgebrochen wird ist das ja nicht das Ende der Prozedur sondern ein Abbruch durch einen Fehler. Ich meinte auch ein "sauberes Durchlaufen" aller CodeZeilen
Eigentlich sollte deshalb auch immer eine Fehlerbehandlung mitgegeben werden, um Solches zu vermeiden.
Übrigens wenn Du im Code Screenupdating auf True setzt und es entsteht irgenwo ein Fehler bevor VBA diese Zeile erreicht hat,
mußt Du es auch im Direktfenster wieder einschalten - oder versteh ich da was falsch ?
aber wie im Betreff geschrieben, geb ich Dir im Prinzip ja Recht ;o)
Gruß Matthias
Anzeige
Also ich würde auf jedem Fall auf True stellen.
04.08.2010 12:09:15
Tino
Hallo,
war nur ein Beispiel, habe auch schon vergessen dies wieder auf True zu setzen,
oder an einer anderen stellen den Code beendet, gleiche Probleme.
Also ich würde auf jedem Fall, wenn ich dies auf False setze auch irgendwo wieder auf True stellen.
Wenn Screenupdating auf True ist, kann ich so nicht sagen ob dies auch einen Effekt hat,
solch einen Code hatte ich noch nicht.
Gruß Tino
Anzeige
nur einmal am Anfang und am Ende
04.08.2010 09:35:56
Tino
Hallo,
Du schreibst
"Dies mache ich in jedem Makro, das ich benutze."
Du solltest es nur einmal während Deine Makros laufen am Anfang auf False und am Ende auf True setzen.
Gruß Tino
Sind irgendwelche AddIns aktiv ?
04.08.2010 10:57:12
NoNet
Hallo Holger,
möglicherweise liegt das Flackern nicht an Deinem Code, sondern an einem aktiven AddIn im Hintergrund, das auf irgendwelche Ereignisse reagiert !?!?!
Kannst Du sicherstellen, dass keine AdDIns geladen sind ?
Zur Not kannst Du das auch per VBA prüfen :
Sub AktiveAddInsAuflisten()
'04.08.2010, NoNet - www.excelei.de (z.Zt. down !)
Dim objAddIn, strAddIns As String, strCOMAddIns As String
Dim intAddIns As Integer, intCOMAddIns As Integer
For Each objAddIn In Application.AddIns
If objAddIn.Installed Then
intAddIns = intAddIns + 1
strAddIns = strAddIns & vbLf & Space(5) & objAddIn.Name
End If
Next
For Each objAddIn In Application.COMAddIns
If objAddIn.Connect Then
intCOMAddIns = intCOMAddIns + 1
strCOMAddIns = strCOMAddIns & vbLf & Space(5) & objAddIn.Description
End If
Next
MsgBox "Aktivierte AddIns : " & vbLf & vbLf & _
"AddIns : " & intAddIns & "  von insgesamt " & Application.AddIns.Count & _
strAddIns & vbLf & vbLf & _
"COM-AddIns : " & intCOMAddIns & "  von insgesamt " & _
Application.COMAddIns.Count & strCOMAddIns
End Sub
Gruß, NoNet
Anzeige
AW: Sind irgendwelche AddIns aktiv ?
04.08.2010 11:23:05
Holger
Hallo NoNet,
ja, ich habe standardmäßig einige Add-Ins installiert, aber die sollten eigentlich den Code nicht beinflussen!?
Ansonsten habe ich ein Bild noch enthalten und das Makro wird gestartet aus einem Ribbon.
AW: Sind irgendwelche AddIns aktiv ?
04.08.2010 18:44:55
Nepumuk
Hallo Holger,
wenn du in Unterroutinen Screenupdating auf True setzt, dann ist die natürlich auch in deiner Hauptroutine so lange True, bis sie von irgendeiner Routine wieder auf False gesetz wird.
Selbst wenn du nach dem Aufruf einer Unterroutine aus deiner Hauptrotine Screenupdating wieder auf False setzt wird der Bildschirm kurz mal zucken.
Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

ScreenUpdating in Excel VBA optimieren


Schritt-für-Schritt-Anleitung

  1. Starte das Makro: Beginne mit dem Setzen von Application.ScreenUpdating = False, um das Bildschirmflackern zu reduzieren.
  2. Führe deine Berechnungen durch: Stelle sicher, dass du deine Berechnungen effizient durchführst, um lange Laufzeiten zu vermeiden.
  3. Setze das Bildschirm-Update zurück: Am Ende des Makros solltest du Application.ScreenUpdating = True verwenden.
  4. Überprüfe andere Einstellungen: Nutze Application.EnableEvents = False und Application.Calculation = xlCalculationManual, um die Performance zu steigern.
  5. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige