Zeit für Application.Calculate
27.10.2022 19:22:23
Dieter
es geht um eine Optimierung, bei der in mehreren Schleifen Variable berechnet werden, die im jeweils nächsten loop wieder als Startwerte zur Verfügung stehen müssen.
Dabei wirken drei sehr umfangreiche Arbeitsblätter zusammen, und ein viertes Arbeitsblatt läuft als ein Interface, um je nach Verlauf der Optimierung neue Parameter zur Verfügung zu stellen. Übergeordnet ist ein Makro, in dem die Optimierungsstrategie abgebildet ist, und das den Arbeitsblättern die jeweiligen Parameter bereitstellt.
Die Applikation ist zeitkritisch, denn bevor die 'Application.Calculate's einer Schleife abgearbeitet sind, wird schon die nächste Schleife mit unvollständig berechneten Startwerten angestoßen. Zur Behebung habe ich nach jedem Calculate eine leere Schleife For I = 1 To 850 / Next I eingefügt. Die 850 hat sich als geeigneter Wert herausgestellt. Sie deckt die worst cases auch da ab, wo es je nach unvorhersehbarem Ablauf Optimierung definitv nicht nötig ist (unnötige Prozesszeit).
Probiert habe ich dies:
Application.Calculate
Do
DoEvents
Loop Until Application.CalculationState = xlPending
Funktioniert aber nicht, weil in den Tabellenblättern viele volatile Funktionen wie JETZT() stehen, weshalb die Do-Schleife nicht mehr verlassen wird.
'Wait' entfällt ebenfalls (s. leere Schleifen) und ist nicht unterhalb einer Sekunde auflösbar.
Bleibt m.E. nur noch 'Sleep', das wohl auf das Betriebssystem zugreift, wobei ich nicht weiß, wie das in den VBA Code zu integrieren ist und wie die Sleep-Zeit an 'Application.CalculationState' o.ä. gekoppelt werden kann.
Habt Ihre eine Idee oder einen Tipp?
Danke vorab
Dieter