Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1112to1116
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
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
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
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige