Gibt es eine Möglichkeit, die CPU-Auslastung einzuschränken, auf die Excel während der Ausführung zugreifen kann? Ich habe ein VBA-Skript, das eine Reihe von Riesen-Array-Formeln berechnet. Die gesamte Berechnung dauert unter Verwendung von 100% meiner CPU vielleicht 20 Minuten, aber ich kann meinen Computer während dieser Zeit nicht verwenden und möchte, dass er bei einer CPU-Auslastung von etwa 50% im Hintergrund ausgeführt wird, damit ich weiterhin andere Aufgaben ausführen kann. Irgendwelche Vorschläge?
Mein Betriebssystem ist Windows 7 Enterprise 64-Bit und die Excel-Version ist 2007-32-Bit
windows-7
worksheet-function
microsoft-excel-2007
vba
learningAsIGo
quelle
quelle
Antworten:
Wenn eine VBA-Funktion aus mehreren Formeln aufgerufen wird oder wenn Ihr Skript die Neuberechnung mehrerer Formeln generiert oder erzwingt, sollte dies auf jeden Fall die Multithread-Berechnungsfunktion von Excel nutzen. Dies würde entweder mehrere Instanzen Ihrer VBA-Funktion für jede Formel ausführen oder mehrere Zellen gleichzeitig neu berechnen, während Ihr VBA-Skript in einem einzelnen Thread ausgeführt wird.
Sie können die Anzahl der von Excel zum Neuberechnen von Formeln verwendeten Threads im Abschnitt Excel-Optionen ... Registerkarte Erweitert ... Formeln begrenzen.
quelle
Versuchen Sie, die Affinität im Task-Manager zu ändern, anstatt die Priorität zu verringern. Wenn Sie mehr als 1 CPU haben, können Sie die Anzahl der von Excel verwendeten CPUs begrenzen. Dies gibt den anderen CPUs die Möglichkeit, an anderen Dingen zu arbeiten.
Klicken Sie mit der rechten Maustaste auf der Registerkarte Prozesse auf Excel, und wählen Sie Affinität festlegen aus. Wählen Sie die CPUs, auf denen Excel ausgeführt werden soll.
quelle
Sie können versuchen, die Priorität des Excel-Prozesses zu verringern, indem Sie den Task-Manager öffnen, zur Registerkarte "Details" oder "Prozesse" wechseln (abhängig von Ihrer Windows-Version), mit der rechten Maustaste auf den Prozess "excel.exe" klicken und a auswählen geringere Priorität. Dies sollte anderen Prozessen mehr CPU-Zeit geben.
quelle
In VBA oder über eine Deklaration stehen Schlaf- und Wartefunktionen zur Verfügung. Die "übermäßig vereinfachte Faustregel" lautet jedoch, niemals Sleep () zu verwenden. (google "niemals sleep ()" programmieren ")
Dokumentseite für Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Beachten Sie, dass "Ruhezustand" und "Warten" dazu führen, dass Excel für die von Ihnen festgelegte Dauer nicht mehr reagiert und dies zu Zeitscheiben "Zugunglücken" führen kann.
Wenn es sich bei Ihrer Berechnung um eine Schleife handelt, können Sie dies für Ihren speziellen Zweck (Verlust der Rechenzeit für die CPU-Verfügbarkeit) tun, indem Sie eine eigene spezielle Wartefunktion erstellen, die z. B. DoEvents () für 1 Sekunde und wiederholt dann kehrt zurück.
DoEvents weist Ihren Code / Interpreter grundsätzlich an, Zeit für das Betriebssystem usw. aufzugeben. Dies führt definitiv dazu, dass Ihr Code länger dauert. Möglicherweise können Sie das Arbeitsblatt auch bearbeiten, während die Berechnung ausgeführt wird, sodass die Laufleistung variieren kann. Prüfung.
Siehe zum Beispiel https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba
quelle
Vor einigen Jahren wurde eine ähnliche Frage gestellt, die eine Lösung bietet: Gibt es Lösungen, die die CPU-Auslastung eines Prozesses einschränken können?
Process Tamer funktioniert unter Windows 7. http://www.donationcoder.com/Software/Mouser/proctamer/
quelle
Ich hatte das gleiche Problem, als mein Laptop 4 GB Speicher hatte. Sobald ich ein Upgrade auf 16 GB bekam, hörte das Problem auf. Nur eine andere mögliche Lösung.
quelle
Fügen Sie die folgenden 2 Zeilen in der Nähe des Starts Ihres Makros hinzu:
Und diese 2 Zeilen am Ende:
Es wird dann weniger Arbeit zu tun haben, während Sie etwas anderes tun.
quelle
Wenn Sie ein 32bi-Büro in einem 64-Bit-Betriebssystem verwenden, sollten Sie diese App verwenden: http://www.ntcore.com/4gb_patch.php
Diese App wird es Excel oder jedem anderen 32-Bit-Büro ermöglichen, mo zu verwenden
quelle
Verwenden Sie OpenOffice oder LibreOffice: Die Skriptleistung ist viel effektiver als die von MS, und Sie können Ihre Berechnungen buchstäblich "drosseln".
EDIT: Warum downvote? Schauen Sie sich das Handbuch an und überzeugen Sie sich selbst. Sie können Ihre Berechnungen auf Java und sein konvertieren ganz gut mit allen Drosselleistung der JVM, zum Beispiel.
quelle