Makro zu schnell?
07.08.2022 20:01:15
Dieter
für eine recht aufwendige Optimierung habe ich ein Makro geschrieben,
bei dem ich den Eindruck habe, dass das Makro der Verabeitung von
Zwischenwerten "davonläuft" ohne sie zu verarbeiten.
Symptome:
Die Zwischenwerte werden nicht immer durch "Bereich(x, y).value =
Zwischenwert" nicht immer an die Position (x, y) geschrieben und dann
bei der folgenden Optimierungsschleife nicht berücksichtigt. Die
Position (x, y) kommuniziert mit 3 weiteren recht umfangreichen
Arbeitsblättern, in denen ein neuer Wert berechnet und der folgenden
Optimierungsschleife zur Verfügung gestellt wird. So weit erst einmal
die Beschreibung in Ganghofer-Prosa.
Hier das vereinfachte Szenario:
1. Programmstart mit Dim, Lesen von Variablen, etc.
2. Beschleunigung mit:
With Application
.ScreenUpdating = False
.Cursor = xlWait
.DisplayAlerts = False
.EnableEvents = False
.DisplayStatusBar = False
.Calculation = xlCalculationManual
End With
3. Schleifenanfang
4. Ermittlung des Zwischenwertes 'Opt'
...
DayOptHA = 0 'Initialisierung
...
TgtRngSet(Stg, 3).Value = Opt 'Opt ist Zielgröße
Application.Calculate
If SrcRngTdy(19, 113) > DayOptHA Then
DayOptHA = SrcRngTdy(19, 113) 'neuer bester Wert
TgtRngTdy(Stg + 4, 127) = Opt
End if
...
Strategie: TgtRngSet(Stg, 3) kommuniziert mit drei weiteren
Arbeitsblättern, in denen SrcRng(19, 113) berechnet und
danach gegen DayOptHA geprüft wird.
5. Schleifenende
6. Normalgeschwindigkeit mit:
With Application
.ScreenUpdating = True
.Cursor = xlNormal
.DisplayAlerts = True
.EnableEvents = True
.DisplayStatusBar = True
.Calculation = xlCalculationAutomatic
End With
7. Programmende
Ich habe den Verdacht, dass 'Application.Calculate' in Punkt 4 für eine
vollständige Kalkulation etc. nicht ausreicht, um den richtigen Wert von
Opt an die richtige Stelle zu schreiben. Die genannten drei Arbeitsblätter
funktionieren einwandfrei (manuell ohne Makros getestet).
Freue mich auf Eure Vorschläge, an welchen
Stellen ich wie schrauben sollte.
Beste Grüße
Dieter