Microsoft Excel

Herbers Excel/VBA-Archiv

Application.ScreenUpdating = False | Herbers Excel-Forum


Betrifft: Application.ScreenUpdating = False von: Michael Groß
Geschrieben am: 16.11.2009 16:40:19

Hallo,

bei mir "flackert" der Bildschirm wenn ich den Wert einer Zelle ändere trotz Verwendung der Funktion Application.ScreenUpdating = False. Die automatische Berechnung ist aktiviert und auch gewollt.

  

Betrifft: AW: Application.ScreenUpdating = False von: Tino
Geschrieben am: 16.11.2009 16:47:28

Hallo,
"wenn ich den Wert einer Zelle ändere"

ich vermute mal Du verwendest Eventmakros, eventuell ruft sich dies selbst wieder auf?

Vielleicht hilft es wenn Du

Application.EnableEvents = False
und am Ende wieder
Application.EnableEvents = True einbaust.

Sonst müsste man mal den Code sehen um zu sagen was man machen könnte.

Gruß Tino


  

Betrifft: AW: Application.ScreenUpdating = False von: Björn B.
Geschrieben am: 16.11.2009 16:49:56

Hallo,

erst mal:
Begrüßung
Problemschilderung (so, dass es jeder versteht, ohne dass man 10mal nachfragen muss)
Fragestellung (Bitte um Hilfe)
Verabschiedung

Dann kommen sich die Menschen (ja, das lesen MEnschen) gleich etwas besser vor.

zweitens:
Mit Deiner kurzen Bemerkung, was bei Dir nicht funktioniert, kann dir keiner helfen, da hier keiner hellsehen kann.

Also:
Zeig uns den Code, wie Du den Wert der Zelle änderst, und auch, was Du zwischen Application.ScreenUpdating = False und der Wertänderung machst.

Dann kann Dir vielleicht auch jemand helfen.

Gruß
Björn B.


  

Betrifft: AW: Application.ScreenUpdating = False von: Michael Groß
Geschrieben am: 16.11.2009 17:08:47

Liebes Forum,

als erstes Sorry, Sorry, Sorry, für meinen klassischen Fehlstart.
Da das meine erste Anfrage war und ich den Wertegang und auch die Prozeduren hier noch nicht kenne, bitte ich das zu entschuldigen. Ich werde mich bessern.
Wie bzw. welche Information sollte ich sinnvoller Weise aufbereiten, damit geholfen werden kann ?

Vielleicht zum Grundverständnis. Meine Arbeitsmappe ist eine Vorlage die sowohl unter Excel 2003 als auch 2007 genutzt wird, Sie ist schreibgeschützt damit die Kollegen keinen Unfug machen können.
Beim Aufrufen der Datei wird der Schreibschutz entfernt, damit Pfadverweise
in der Datei auf ein spezielles Add-In gelöscht werden können, dann wird der Schreibschutz wieder gesetzt. Mein Code lautet wie folgt :

Option Explicit

Private Sub Workbook_Open()

' Bildschirm flimmern deaktivieren
    Application.ScreenUpdating = False

'Anzeige Verknüpfungen aktualisieren verhindern
    Application.DisplayAlerts = False

'Gelbe Farbe Hintergrund definieren
    ActiveWorkbook.Colors(27) = RGB(255, 255, 153)

'Schreibschutz entfernen

    Dim Blatt As Worksheet
        For Each Blatt In ActiveWorkbook.Worksheets
        Blatt.Unprotect ("migro")
        Next Blatt

'Add-In-Verzeichnispfad löschen
    Dim aLinks, i&, res$, xla$

' Hier den Namen des AddIns angeben ...
    xla = "taxcel2003.xla"
    aLinks = Me.LinkSources(xlExcelLinks)

    If Not IsEmpty(aLinks) Then
        For i = 1 To UBound(aLinks)
            res = Right(aLinks(i), Len(aLinks(i)) - InStrRev(aLinks(i), 
"\"))
            If res = xla Then
                Me.ChangeLink aLinks(i), xla, xlExcelLinks
                Exit For
            End If
        Next i
    End If
'Schreibschutz setzen

        For Each Blatt In ActiveWorkbook.Worksheets
        Blatt.Protect ("migro")
    Next Blatt
'Fehlermeldungen wieder anzeigen
    Application.DisplayAlerts = True

'Bildschirm aktuallisieren ein
    Application.ScreenUpdating = True
End Sub

Gruß
Michael


  

Betrifft: AW: Application.ScreenUpdating = False von: Björn B.
Geschrieben am: 17.11.2009 07:40:01

Hallo Michael,

so ist das doch gleich viel freundlicher, danke.

Also, wo genau änderst Du denn jetzt den Wert einer Zelle?
Was soll Dein Code bewirken? Erklär bitte, was Du machst.

Und kleiner Tipp am Rande, das nächste mal Dein Passwort ganz weglassen oder eine "Fake"-Passwort nehmen, vielleicht war das ja auch schon eins.

So auf den ersten Blick sehe ich keinen Fehler, aber ich weiß nicht, was Dein Addin macht und ich kenne mich auch mit den Matrix-Befehlen nicht aus, sorry. Deshalb musst du es mir etwas besser erklären, vielleicht hat aber jemand anders schon was gefunden.

Gruß
Björn B.


  

Betrifft: AW: Application.ScreenUpdating = False von: Michael Groß
Geschrieben am: 17.11.2009 11:38:52

Hallo Björn,

danke für die Antwort. Ich bin jetzt Seite für Seite meinen Code noch mal durchgegangen, habe einige kleine Schönheitsfehler beseitigt und es läuft jetzt zufrieden stellender, aber noch nicht optimal. Man kann zumindest jetzt wieder damit arbeiten.
Das Problem wird sein, dass jede Zelländerung auf einem Blatt Neuberechnungen auf anderen Blättern bewirken, deren Ergebnis zum Teil auf dem aktuell bearbeiteten Blatt angezeigt wird bzw. wiederum für die Neuberechnung anderer Zellen dient. Ich habe evtl. einfach zu viele Formeln in meiner Mappe ?
Komisch ist nur, dass wird mir erst jetzt, nachdem ich Windows 7 installiert habe, so richtig bewusst. Ich habe das auch auf anderen Rechnern getestet mit XP SP3, dort tritt es nicht so sehr auf, das Flimmern während der Neuberechnung. I don't no

Ich würde gern die Datei mal jemanden zum testen und überprüfen geben, um noch ein paar Tips zur Optimierung zu bekommen. Außerdem würde die umständliche Fehlerbeschreiberei wegfallen.
Allerdings ist mein Chef da sehr eigen, von wegen geistigem Eigentum etc.

Gruß Michl


  

Betrifft: AW: Application.ScreenUpdating = False von: Tino
Geschrieben am: 17.11.2009 18:44:32

Hallo,
sollte es daran liegen, stell die Berechnung mal auf manuell ein.

Dim iCalc As Integer
'aktuellen zustand merken
iCalc = Application.Calculation
'Berechnung auf manuell stellen
Application.Calculation = xlCalculationManual

   'dein jetziger Code
   '...
   '...

'Berechnung zurückstellen
Application.Calculation = iCalc
Gruß Tino


  

Betrifft: AW: Application.ScreenUpdating = False von: Michael Groß
Geschrieben am: 18.11.2009 12:36:16

Hallo Tino,

das hat mich leider auch nicht weiter gebracht.
Ich habe jetzt folgenden Code in "diese Arbeitsmappe" eingebaut :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
    Application.ScreenUpdating = False
    
    Application.ScreenUpdating = True

End Sub
Damit habe ich das Flimmern zumindest sehr stark reduziert. Obwohl mich auch das noch nicht befriedigt.

Gruß
Michael


  

Betrifft: hast Du auch das gesamtpacket geschnürt? von: Tino
Geschrieben am: 18.11.2009 12:56:46

Hallo,

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim iCalc As Integer
With Application
   iCalc = .Calculation
   .Calculation = xlCalculationManual
   .ScreenUpdating = False
   .EnableEvents = False
   
     'Dein Code
     '...
    
   .ScreenUpdating = True
   .EnableEvents = True
   .Calculation = iCalc
End With
End Sub
Gruß Tino


  

Betrifft: AW: Application.ScreenUpdating = False von: Michael Groß
Geschrieben am: 18.11.2009 13:15:32

Hi Tino,

was meinst du mit Gesamtpaket ?


Gruß
michael


  

Betrifft: wie im Beispiel gezeigt oT. von: Tino
Geschrieben am: 18.11.2009 14:26:24




  

Betrifft: AW: Application.ScreenUpdating = False von: Michael Groß
Geschrieben am: 18.11.2009 14:54:59

Hi Tino,

ich verstehe es trotzdem nicht, ich bin doch ein "absoluter Blindflieger" in Sachen VBA.
Helf mir bitte mal auf die Spünge.

Danke Michael


  

Betrifft: na so... von: Tino
Geschrieben am: 18.11.2009 16:31:22

Hallo,

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim iCalc As Integer
  With Application
     iCalc = .Calculation
     .Calculation = xlCalculationManual
     .ScreenUpdating = False
     .EnableEvents = False
     
    '**********************************
       'hier Deinen Code einfügen
       '...
    '**********************************

    
     .ScreenUpdating = True
     .EnableEvents = True
     .Calculation = iCalc
  End With
End Sub
Gruß Tino