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

Makro zu schnell???

Makro zu schnell?
07.08.2022 20:01:15
Dieter
Moin aus Hamburg,
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

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zu schnell?
07.08.2022 21:00:48
onur

.....
Application.Calculate
Do
DoEvents
Loop Until Application.CalculationState = xlPending
......

AW: Makro zu schnell?
07.08.2022 22:13:37
snb
Minimier die Interaktion mit Arbeitsblättern: verwende statt Arrays.
AW: Makro zu schnell?
08.08.2022 12:38:20
Dieter
Moin onur,
danke, hat an vielen Stellen geholfen, bei anderen habe ich wahrscheinlich eine Lösung.
Werde Deine Idee auch bei anderen Applikationen einsetzen, wo es mit der Reaktionszeit
auch "quietscht".
Meine Anfrage ist damit für mich abgeschlossen.
Beste Grüße
Dieter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige