Excel-VBA-warten-Anwendung.calculatefull
wenn ich Anruf-Anwendung.calculatefull und setzen einen breakpoint an die nächste Anweisung, und ich sehe in der status-bar, dass der Prozessor die Verarbeitung nach einer Weile aber schon die nächste Zeile von code.
Ich habe das forum und die Leute vorgeschlagen, die Verwendung von DoEvents. In meinem Fall ein problem. Als das Arbeitsblatt hat viele Formel und einige von Ihnen zeigen Falsches Ergebnis nach dem ersten Lauf, obwohl die Formel korrekt ist, also, wenn ich rufen Sie die calculateFull für das Arbeitsblatt, korrigiert er es aber nicht abwarten
Wenn ich DOEvents, die CalculateFull nicht aktualisieren Sie das Arbeitsblatt.
So, ich bin in einer Verlegenheit.
Bitte um Rat wie kann ich warten, bis der Prozessor für die komplette Abwicklung auf Anfrage.CalculationFull und nach, dass nur " gehe zu Nächster Zeile code.
Ich verwendet Anwendung.warte auch, aber es scheint zu halten, den Prozessor und einmal veröffentlicht, es beginnt die Berechnung dann, die nicht mein problem lösen.
waittime (1000)
SendKeys "+^%{F9}", True
Application.CalculateFullRebuild
Dies ist der code, den ich jetzt nutzen. Wenn ich den breakpoint an die nächste Zeile des Codes sehe ich, dass die application.calculatefullRebuild
dauert ein paar Sek. und geht die nächste Zeile und wenn ich das activesheet nun, in weiteren 2-3 sec sehe ich in der status bar Berechnung (4 Prozessoren):xx% und nach dem der worksheet-Werten geändert, um die richtigen Werte
Dies ist mein Problem. Wenn Application.CalculateFullRebuild
abgeschlossen und geht zu der nächsten Zeile, mein Arbeitsblatt Ergebnisse sind immer noch nicht korrekt und erst nach ein paar Sekunden die Prozessoren, die die Berechnung der statusbar Meldung, das Arbeitsblatt wird aktualisiert.
Wie kann ich warten, ansonsten ist der restliche code Holen falschen Ergebnissen.
- könntest du vielleicht ein Bild angeben, was passiert, oder etwas anderes, damit wir sehen können was du meinst
- AFAIK
.CalculateFull
ist nicht async, so dass mit einer single-threaded Umgebung wie VBA ist es sehr unwahrscheinlich, dass der code springt in die nächste Zeile ohne Abschluss Berechnung :/ seltsam zumindest - Hat deine Arbeitsmappe verwenden von asynchronen Funktionen? Und warum haben Sie verwenden, um CalculateFull statt Berechnen?
- Wartezeit (1000) SendKeys "+^%{F9}", True Application.CalculateFullRebuild Anwendung.calculatefullRebuild dauert ein paar Sek. und geht die nächste Zeile und wenn ich das activesheet nun, in weiteren 2-3 sec sehe ich in der status bar Berechnung (4 Prozessoren):xx% und nach dem der worksheet-Werten geändert, um die richtigen Werte haben. Wenn Die Anwendung.CalculateFullRebuild abgeschlossen und geht zu der nächsten Zeile, Arbeitsblatt Ergebnisse sind immer noch nicht korrekt und erst nach ein paar Sekunden die Prozessoren, die die Berechnung der statusbar Meldung, das Arbeitsblatt wird aktualisiert. Wie man dieses Problem beheben
- - Anwendung.Berechnen funktioniert, aber die Ergebnisse in einem Arbeitsblatt, das viele Formel nicht die richtigen Ergebnisse, und dann erneut Anwendung wieder aufzubauen hilft, um den Wert zu korrigieren, aber makro ist nicht warten, bis der Vorgang abgeschlossen ist, und gehen zur nächsten Zeile
- Hat deine Arbeitsmappe verwenden Sie Arbeitsblatt-Funktionen, die nicht native-Excel-Funktionen? Wenn ja, was sind Sie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ich glaube, dass die Frage hier hat die Antwort, die du suchst (leicht modifiziert unten, um es in eine while-Schleife):
Kleben die obige Schleife im code direkt nach dem Start der Berechnung sollten alle sein, die erforderlich ist.
Ich die gleiche Lösung wie Brad erweitert durch einen timer, um den Benutzer zu informieren, wenn die Dinge schief gehen. Ich fand, dass ohne Auslösung der Anwendung.Befehl Calculate (oder CalculateFull) excel nicht gehen Berechnung durch die DoEvents-allone.