Berechnungen abwarten
25.07.2023 18:42:18
Dieter Krüsemann
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