Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

beschleunigung mit screenupdating und calculation

Forumthread: beschleunigung mit screenupdating und calculation

beschleunigung mit screenupdating und calculation
Jörg-HH
Hallo zusammen
mit
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
bewirkt man ja idR eine erhebliche Beschleunigung längerer Prozeduren. Mir fällt aber auf, daß kurze Prozeduren dadurch aber ganz drastisch verlangsamt werden.
Woran liegt das, und gibt es da eine irgendwie festellbares Optimum, unterhalb dessen man die Befehle besser wegläßt?
Grüße - Jörg
Anzeige
AW: beschleunigung mit screenupdating und calculation
01.11.2009 00:56:01
Daniel
Hi
das ist mir noch nie aufgefallen, das Prozeduren dadurch langsamer werden.
allerdings ist es mein bestreben, Makros so zu schreiben, daß diese Funktionen nicht benötigt werden, um ausreichend schnell zu sein, deswegen benutze ich sie auch selten.
Gruß, Daniel
AW: beschleunigung mit screenupdating und calculation
01.11.2009 01:47:20
Jörg-HH
Hi Daniel
mitunter stören die Screenupdatings ja auch einfach, abgesehen von der Geschwindigkeit.
Aber diesen Schnipsel
For Each c In Tabelle1.Range("tg1_Abbild")
c.Formula = Tabelle2.Cells(c.Row, c.Column).Formula
Next
hatte ich erst "mit" - und es lief gähnend langsam. Nun ist es "ohne" - und es geht fix.
Gruß Jörg
Anzeige
AW: beschleunigung mit screenupdating und calculation
01.11.2009 13:33:31
Daniel
HI
kannst du das mal irgendwie als Beispiel hochladen?
das würde mich schon interessieren.
Gruß, Daniel
biddä schöön...
01.11.2009 20:02:55
Jörg-HH
https://www.herber.de/bbs/user/65504.xls , hier in der Form "ohne"
Hab das auch an anderen Stellen schon erlebt....
Grüße - Jörg
Anzeige
AW: biddä schöön...
01.11.2009 20:53:40
ransi
HAllo Jörg
Bevor man Schleifen einsetzt lohnt sich immer eine Prüfung obs auch ohne geht.
Sub sichern()
Dim start As Double
start = Timer
Tabelle2.Range("speich_Target1Abbild").Formula = Tabelle1.Range("tg1_Abbild").Formula
MsgBox Timer - start
End Sub


Sub rücksichern()
Dim start As Double
start = Timer
Tabelle1.Range("tg1_Abbild").Formula = Tabelle2.Range("speich_Target1Abbild").Formula
MsgBox Timer - start
End Sub


Um überhaupt eine messbare Laufzeit zubekommen habe ich die Bereiche tg1_Abbild und speich_Target1Abbild mal auf A1:C20000 aufgebohrt. Laufzeit ca. 0,3 Sekunden für 60000 Formeln.
Wenn du das Ganze jetzt noch richtig schnell machen willst und noch die eine oder andere Hundertstel Skunde rauskitzeln willst, schalte alles Störende weg.
Option Explicit

Dim c As Range
Dim AppCalc
Dim AppScreen
Dim AppEvents
Dim AppCursor

Sub sichern()
Dim start As Double
start = Timer
On Error GoTo raus
Call More_speed
Tabelle2.Range("speich_Target1Abbild").Formula = Tabelle1.Range("tg1_Abbild").Formula
raus:
Call Meine_Einstellungen
MsgBox Timer - start
End Sub


Sub rücksichern()
Dim start As Double
start = Timer
On Error GoTo raus
Call More_speed
Tabelle1.Range("tg1_Abbild").Formula = Tabelle2.Range("speich_Target1Abbild").Formula
raus:
Call Meine_Einstellungen
MsgBox Timer - start
End Sub


Public Sub More_speed()
With Application
    '#######################
    'Einstellungen speichern
    AppCalc = .Calculation
    AppScreen = .ScreenUpdating
    AppEvents = .EnableEvents
    AppCursor = .Cursor
    '#######################
    'Angezogene Bremsen lösen
    .Calculation = xlCalculationManual 'Berechnung auf manuell
    .ScreenUpdating = False 'Bildschirmaktualisierung aus
    .EnableEvents = False 'Ereignismakros abschalten
    .Cursor = xlDefault 'Sanduhr ausschalten
    '#######################
End With
End Sub


Public Sub Meine_Einstellungen()
With Application
    .Calculation = AppCalc
    .ScreenUpdating = AppScreen
    .EnableEvents = AppEvents
    .Cursor = AppCursor
End With
End Sub


Zwar mehr Code, dafür aber schneller. LAufzeit ca. 0,25 Sekunden.
ransi
Anzeige
beeindruckend...
03.11.2009 22:49:12
Jörg-HH
Hi Ransi
das ist aber ne gute Lektion. Hab den Timer mal in die Schleifenversion gesetzt - 30 sek wurden angezeigt
Danke für die Nachhilfe!
Jörg
Sanduhr ausschalten
06.11.2009 01:30:42
Jörg-HH
Hi Ransi
du hattest dies geschrieben
With Application
.Calculation = xlCalculationManual 'Berechnung auf manuell
.ScreenUpdating = False 'Bildschirmaktualisierung aus
.EnableEvents = False 'Ereignismakros abschalten
.Cursor = xlDefault 'Sanduhr ausschalten
End With

Hab das in meinen Code eingebaut, aber die Sanduhr sehe ich trotzdem noch. Woran könnte das liegen?
Grüße - Jörg
Anzeige
gleich noch ne Frage
01.11.2009 20:21:38
Jörg-HH
Hi Daniel,
wenn du dir die Datei anguckst - klick doch mal auf Speichern unter... und drück in der erscheinenden UF auf Abbrechen. Am Ende kommt der Speichern-unter-Dialog, was bei Abbrechen nun ganz und gar nicht beabsichtigt ist.
Kannst du mir sagen, warum der auftaucht und wie man das unterdrücken kann? Exit Sub oder EnableEvents scheinen nichts zu bringen...
Grüße - Jörg
Anzeige
AW: gleich noch ne Frage
01.11.2009 22:08:02
Daniel
Hi
ich würde das über ne einfache Msgbox lösen, beachte auch den Schritt "Cancel = True" um das Speichern zu verhindern.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Select Case MsgBox("Sie haben die Datei verändert. " & _
"Wollen Sie die Änderungen rückgängig machen?", vbYesNoCancel)
Case vbYes
Call rücksichern
Case vbNo
Case vbCancel
Cancel = True
End Select
End Sub
den Rest hat Ransi ja schon erklärt.
Schleifenfrei programmieren, dann gibts auch keine Probleme mit der Performance
Gruß, Daniel
Anzeige
tja, man muß nur die richtige Frage stellen...
03.11.2009 23:55:04
Jörg-HH
Hi Daniel,
das ist ja viel einfacher als meine umständliche UF. Die war nur deshalb entstanden, weil mir bloß die Frage einfiel "was möchen Sie tun" - und dazu paßt natürlich nicht ja/nein, sondern selbstbeschriftete Buttons. Aber mit bissl mehr Phantasie kommt man dann eben auf ne Frage, die man mit ja/nein beantworten kann.
Allerdings is das ja weniger was für'n Excelforum. Im Deutschkurs wär ich da wohl besser aufgehoben ;-))
Danke für die Idee!
Grüße - Jörg
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Excel-Optimierung: Beschleunigung mit ScreenUpdating und Calculation


Schritt-für-Schritt-Anleitung

Um die Performance deiner Excel VBA-Makros zu verbessern, kannst du die zwei wichtigen Eigenschaften Application.ScreenUpdating und Application.Calculation anpassen. Hier sind die Schritte, um dies effektiv zu tun:

  1. Deaktiviere die Bildschirmaktualisierung:

    Application.ScreenUpdating = False
  2. Setze die Berechnung auf manuell:

    Application.Calculation = xlCalculationManual
  3. Führe deine Berechnungen oder Schleifen durch. Zum Beispiel:

    For Each c In Tabelle1.Range("tg1_Abbild")
       c.Formula = Tabelle2.Cells(c.Row, c.Column).Formula
    Next
  4. Reaktiviere die Bildschirmaktualisierung und setze die Berechnung zurück:

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

Diese Vorgehensweise hilft, die Ausführung von langen Prozeduren in Excel zu beschleunigen.


Häufige Fehler und Lösungen

  • Problem: Makros laufen langsamer, wenn Application.ScreenUpdating und Application.Calculation aktiviert sind.

    • Lösung: Überprüfe, ob du diese Einstellungen nur in langen Prozeduren verwendest. Bei kurzen Makros kann es schneller sein, sie nicht zu deaktivieren.
  • Problem: Sanduhr wird weiterhin angezeigt, obwohl Application.ScreenUpdating = False gesetzt ist.

    • Lösung: Stelle sicher, dass du alle relevanten Einstellungen in einem With Application Block verwendest und prüfe, ob andere Prozesse die Bildschirmaktualisierung beeinflussen.

Alternative Methoden

  • Direkte Berechnungen: Statt For Each Schleifen zu verwenden, kannst du auch direkt Berechnungen auf Zellbereichen anwenden. Das kann die Ausführungsgeschwindigkeit erheblich steigern.

  • Verwendung von Arrays: Lade Daten in ein Array, bearbeite sie und schreibe sie dann zurück in Excel. Dies vermeidet ständige Interaktionen mit dem Excel-Blatt, was die Performance verbessert.


Praktische Beispiele

Hier sind einige Beispiele, wie du die Einstellungen in deinen Makros verwenden kannst:

  1. Beispiel für das Deaktivieren von ScreenUpdating:

    Sub BeispielMakro()
       Application.ScreenUpdating = False
       ' Deine Berechnungen hier
       Application.ScreenUpdating = True
    End Sub
  2. Beispiel für manuelle Berechnung:

    Sub BerechnungOptimieren()
       Application.Calculation = xlCalculationManual
       ' Berechnungen hier
       Application.Calculation = xlCalculationAutomatic
    End Sub

Diese Beispiele zeigen, wie du mit Application.Calculation und Application.ScreenUpdating die Ausführung deiner Makros optimieren kannst.


Tipps für Profis

  • Einstellungen speichern: Bevor du Application.ScreenUpdating oder Application.Calculation änderst, speichere die aktuellen Einstellungen. Dies hilft, sie nach der Ausführung wiederherzustellen.

    Dim AppCalc As XlCalculation
    Dim AppScreen As Boolean
    AppCalc = Application.Calculation
    AppScreen = Application.ScreenUpdating
  • Vermeide unnötige Aktualisierungen: Wenn du viele Daten in einer Schleife bearbeitest, versuche, die Bildschirmaktualisierung und Berechnung nur einmal am Anfang und Ende zu setzen.


FAQ: Häufige Fragen

1. Warum wird die Ausführung meiner kurzen Makros langsamer? Die Deaktivierung von Application.ScreenUpdating und Application.Calculation kann in kurzen Makros mehr Zeit kosten, weil die overhead-Kosten für das Aktivieren und Deaktivieren überwiegen.

2. Was bedeutet Application.ScreenUpdating = False? Es bedeutet, dass Excel während der Ausführung eines Makros den Bildschirm nicht aktualisiert, was die Ausführungsgeschwindigkeit erhöht.

3. Wie kann ich die Bildschirmaktualisierung wirklich deaktivieren? Stelle sicher, dass alle relevanten Einstellungen in einem With Application Block erfolgt sind und überprüfe, ob andere Prozesse die Bildschirmaktualisierung beeinflussen.

Mit diesen Vorgehensweisen und Tipps kannst du die Geschwindigkeit deiner Excel VBA-Anwendungen erheblich steigern und das Nutzererlebnis verbessern.

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