Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Makro wird zu schnell ausgeführt

Betrifft: Makro wird zu schnell ausgeführt von: Christian
Geschrieben am: 15.09.2020 14:49:25

Hallo Zusammen,

ich hoffe, dass meine Frage nicht in die Kategorie "dumme" Frage zulegen ist.

Ich habe in Excel per Makro die Berechnungsoptionen auf "manuell" gestellt:

Application.Calculation = xlCalculationManual


Anschließend wird eine UserForm geladen, deren Textfeld-Eingaben ich per Command-Button an 3 verschiedene Tabellenblätter übergebe, dort soll gerechnet und direkt die Ergebnisse wieder in die UserForm zurückgespielt werden.

Die Berechnung löse ich mit

Calculate

aus.


Seltsamerweise "rechnet Excel nicht zu Ende", sondern gibt einen Teil der Ergebnisse unberechnet wieder in die UserForm zurück.


Meine Frage ist also, ob es sein kann, dass die Abfolge im Makro zu schnell für die Fertigstellung der Berechnung in Excel ist?

Dabei habe ich bereits versucht, "Calculate" mit worksheets.select und activesheet.calculate etc. zu ersetzen. Innerhalb des Makros bleibt das erfolglos.

Existiert so ein Phänomen und wenn ja, gibt es Lösungen dazu? Mit einer Warteschleife, wie z.B.

Application.Wait Now + TimeSerial(0, 0, 2)

bin ich ebenfalls nicht weiter gekommen.

Vielen Dank im Voraus für jeden guten Gedanken und viele Grüße

Christian

Betrifft: AW: Makro wird zu schnell ausgeführt
von: ChrisL
Geschrieben am: 15.09.2020 15:11:32

Hi Christian

Ich würde mal testen, ob Calculate isoliert (ohne Userform, Textboxen etc.) ausgeführt, zum richtigen Ergebnis führt.

Spontan vermute ich nämlich eher, dass die Reihenfolge der Berechnungen nicht stimmt z.B.
Blatt 1 = Quelle
Blatt 2 = Zwischenresultat
Blatt 3 = Endresultat
(wenn das Endresultat berechnet wird, bevor das Zwischenresultat berechnet wurde, stimmt das Ergebnis natürlich nicht)

Die Neuberechnung kannst du auch gezielt nach einzelnen Tabellen, Bereichen ausführen:
https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.calculate(method)

Vielleicht hilft es auch auf xlCalculationSemiautomatic umzuschalten.
https://docs.microsoft.com/en-us/office/vba/api/excel.xlcalculation

cu
Chris

Betrifft: AW: Makro wird zu schnell ausgeführt
von: Christian
Geschrieben am: 15.09.2020 15:41:00

Hallo Chris,
vielen Dank für die schnelle Reaktion.
Leider ohne Erfolg. Ich habe das Makro innerhalb der UserForm vor der Rückgabe der berechneten Daten abgebrochen und in den Tabellenblättern auf "Neu Berechnen" geklickt. Es funktioniert alles.
Auch wenn ich NICHT auf manuelle Berechnung umstelle, kommt das Rechenergebnis, dass dann final richtig in den Tabellenblättern erscheint, nicht in der Userform an.
Der Befehl, der wohl "zu schnell" ausgeführt wird ist der folgende:

Worksheets("ZWISCHENSPEICHER").Range("ZWISCHENSPEICHER_RANGE").Value = Worksheets("ZWISCHENSPEICHER RAM").Range("ZWISCHENSPEICHER_RAM_RANGE").Value

Hier werden anscheinend die Daten aus dem Tabellenblatt ZWISCHENSPEICHER RAM eher entnommen als diese dort zu Ende berechnet sind. Die UserForm speist sich dann aus dem ZWISCHENSPEICHER.
Ich bin echt ratlos.
Viele Grüße
Christian

Betrifft: AW: Makro wird zu schnell ausgeführt
von: Christian
Geschrieben am: 15.09.2020 15:51:55



Betrifft: AW: Makro wird zu schnell ausgeführt
von: peterk
Geschrieben am: 15.09.2020 15:55:38

Hallo

Füge einmal ein "DoEvents" in Dein Makro ein (vielleicht hilfts)

Peter

Betrifft: AW: Makro wird zu schnell ausgeführt
von: MatthiasG
Geschrieben am: 15.09.2020 16:26:48

Hallo,

oder, falls ein einfach DoEvents nicht reicht, eine Schleife:
Do
    DoEvents
Loop Until Application.CalculationState = xlDone
Gruß Matthias

Betrifft: AW: Makro wird zu schnell ausgeführt
von: ChrisL
Geschrieben am: 15.09.2020 16:30:16

Hi

OK, nochmal getestet.

Inzwischen glaube ich es hat nichts mit der Neuberechnung zu tun, sondern mit der Übernahme in die TextBox (Repaint war somit kein schlechter Gedanke).

Ich habe es jetzt mal wie folgt neu gesetzt:
With UserForm1.TextBox1
    .ControlSource = ""
    .ControlSource = "Tabelle1!A1"
End With
Allerdings solltest du die TextBox gar nicht mit einem Formelergebnis via ControlSource verknüpfen. Textbox und Zelle aktualisieren sich ja grundsätzlich gegenseitig. Im Moment, wo du ControlSource neu setzt, wird die Formel mit dem Textbox Inhalt überschrieben.

Warum verzichtest du nicht ganz auf ControlSource und übernimmst einfach mit Textbox1 = Range(x)

cu
Chris

Betrifft: AW: Makro wird zu schnell ausgeführt
von: Christian
Geschrieben am: 15.09.2020 17:24:08

Ich habe einen Weg gefunden. Eure Hinweise haben dabei sehr geholfen. Vielen Dank und viele Grüße,
Christian

Betrifft: AW: Makro wird zu schnell ausgeführt
von: Christian
Geschrieben am: 15.09.2020 17:24:10

Ich habe einen Weg gefunden. Eure Hinweise haben dabei sehr geholfen. Vielen Dank und viele Grüße,
Christian

Betrifft: AW: Makro wird zu schnell ausgeführt
von: Christian
Geschrieben am: 15.09.2020 17:24:10

Ich habe einen Weg gefunden. Eure Hinweise haben dabei sehr geholfen. Vielen Dank und viele Grüße,
Christian

Betrifft: AW: Makro wird zu schnell ausgeführt
von: Christian
Geschrieben am: 15.09.2020 17:24:11

Ich habe einen Weg gefunden. Eure Hinweise haben dabei sehr geholfen. Vielen Dank und viele Grüße,
Christian

Betrifft: AW: Makro wird zu schnell ausgeführt
von: Christian
Geschrieben am: 15.09.2020 17:24:13

Ich habe einen Weg gefunden. Eure Hinweise haben dabei sehr geholfen. Vielen Dank und viele Grüße,
Christian

Betrifft: AW: Makro wird zu schnell ausgeführt
von: Christian
Geschrieben am: 15.09.2020 17:24:14

Ich habe einen Weg gefunden. Eure Hinweise haben dabei sehr geholfen. Vielen Dank und viele Grüße,
Christian

Betrifft: AW: Makro wird zu schnell ausgeführt
von: ChrisL
Geschrieben am: 15.09.2020 17:29:26

Hi

Congrats...

Würde mich brennend interessieren, welcher Weg dies ist (nur grob). Vielleicht kann ich ja was dazu lernen.

cu
Chris

Betrifft: AW: Makro wird zu schnell ausgeführt
von: Christian
Geschrieben am: 15.09.2020 17:32:26

Ich bin tatsächlich wie von Dir vorgeschlagen vorgegangen, was ein wenig zeitaufwendig war, da ich 3 Händevoll Textboxen verwende. Aber scheinbar habe ich damit den Rechenfehler umgehen können:

With UserForm1.TextBox1
.ControlSource = ""
.ControlSource = "Tabelle1!A1"
End With

Daher DANKE!

Betrifft: AW: Makro wird zu schnell ausgeführt
von: ChrisL
Geschrieben am: 15.09.2020 18:31:28

Hi Christian

Danke für die Rückmeldung. Freut mich.

cu
Chris

Beiträge aus dem Excel-Forum zum Thema "Makro wird zu schnell ausgeführt"