Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1936to1940
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

Berechnungen abwarten

Berechnungen abwarten
25.07.2023 18:42:18
Dieter Krüsemann
Moin aus Hamburg,

um sicherzustellen, dass Daten in einer umfangreichen Arbeitsmappe vor der weiteren Verarbeitung vollständig berechnet sind, verwende ich

Do
DoEvents
Application.Calculate
Loop While Not Application.CalculationState = xlDone

nachdem in einem Arbeitsblatt vorbereitete Daten an andere Arbeitsblätter zur Berechnung wurden. Das verlängert die Rechenzeit erwartungsgemäß erheblich, weil diese 'erzwungene Kalkulation' innerhalb eines Programmzyklus etwa 1500 bis 2000 mal stattfindet. Ohne diese Routine geht es natürlich schneller, aber überraschenderweise liegen die berechneten Werte erheblich näher an den Erwartungswerten. Dieses Phänomen ist statistisch signifikant und tritt auch bei anderen Versuchen auf, dem Programm mehr Zeit zur Berechnung zur Verfügung zu stellen, z.B.:

1. Application.Calculate 'pur'
2. Application.Wait (Now + TimeSerial(0, 1, 1)) '1 Sekunde Verzögerung

Allerdings bringt die schnellere und bessere Version längst noch nicht das Optimum, was durch eine rein manuelle Nachstellung des Makros nachweisbar ist. Die Unterschiede sind teilweise erheblich. Wie kann ich sicherstellen, dass wirklich vollständig berechnet wurde, selbst um den Preis noch längerer Rechenzeit?
Bin neugierig auf Eure Kommentare. Stichworte reichen erst einmal aus.

Danke
Dieter

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Berechnungen abwarten
25.07.2023 20:03:36
onur
"Wie kann ich sicherstellen, dass wirklich vollständig berechnet wurde, selbst um den Preis noch längerer Rechenzeit?"
Du hast doch die Frage schon selbst beantwortet: Nur mit der "Do Loop"-Version. Die Veränderung einer einzigen Zelle per VBA kann eine ganze Kaskade von Berechnungen/Veränderungen auf Blatt/Mappe auslösen, vor allem, wenn du viele Formeln mit "SummeWenn" , "Zählenwenn" usw hast, die einen riesigen Bereich überwachen.
Das Makro wartet NICHT darauf, dass Excel meldet: "ich wäre dann soweit fertig, DU kannst weiter machen", es macht einfach weiter.
Das einzig wirksame ist also, das Makro zu zwingen, exakt so lange zu warten (und währenddessen auf Events zu reagieren), bis Excel "den Vollzug" gemeldet hat.
Und ich würde noch am Anfang des Makros die Berechnungen auf manuell stellen, damit nur berechnet wird, wenn der Code es an kritischen/relevanten Stellen verlangt.
Sonst versucht Excel, wenn du z.B. in einer Schleife Werte in Zellen veränderst, bei jeder einzelnen Änderung alles neu zu berechnen. Besser wäre es, abzuwarten, bis die Schleife beendet ist.
Anzeige
AW: Berechnungen abwarten
26.07.2023 10:37:37
Dieter Krüsemann
Moin onur,

der Fehler liegt tatsächlich im Programmablauf, der die Loopfunktion bei bestimmten Variablenkonstellationen unwirksam macht. Das ist jetzt behoben. Das von Dir beschriebene Ein- und Ausschalten von Hintergrundaktivitäten (screen updating, calculation, etc.) war bereits integriert.

Alternativ zur Loopfunktion scheint es schon auszureichen, die Hintergrundaktivitäten an den kritischen Stellen aus- und danch wieder einzuschalten. Das werde ich noch im Detail testen.

Vielen Dank an Dich und an Daniel für Eure Hilfe. Die Angelegenheit ist damit gelöst.
Dieter
AW: Berechnungen abwarten
26.07.2023 10:54:43
daniel
Hi
wenn das Ein- und Ausschalten der Hintergrundaktivitäten eine signifikante Verbesserung der Performance ergibt, dann hat der Code noch Optimierungspotential.
Gruß Daniel
Anzeige
AW: Berechnungen abwarten
25.07.2023 19:00:35
daniel
Hi
WAIT ist normalerweise nutzlos, da es Excel anweist zu warten und in der Zeit nichts anderes zu machen.
Normalerweise wartet ein Makro immer, bis die angestoßenen Berechnungen ausgeführt sind.
Bei Externen Abfragen oder ähnlichem kann man ggf in den Eigenschaften auswählen, ob diese im Hintergrund ausgeführt werden sollen, dann macht Excel schon mal weiter während diese noch laufen, oder im Vordergrund, dann wartet Excel
Gruß Daniel
AW: Berechnungen abwarten
25.07.2023 19:08:43
Dieter Krüsemann
Moin Daniel,

das mit der Wait-Funktion habe ich mir auch schon gedacht. Bleibt nur noch die Frage, warum die manuelle Nachstellung de Makros zu noch besseren Ergebnissen führt. Das bedeutet doch, dass die Do-Schleife nicht vollständig arbeitet.

Dieter
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige