Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro im Pausemodus: CPU-Auslastung trotzdem da, Workaround?

Forumthread: Makro im Pausemodus: CPU-Auslastung trotzdem da, Workaround?

Makro im Pausemodus: CPU-Auslastung trotzdem da, Workaround?
28.06.2024 11:41:43
Frank Dreier
Hallo Leute,

leider hat VBA eine merkwürdige Eigenart:
Egal welche Pause-Funktion ich in einem Makro benutze (z.B. Application.wait Now + Timeserial(0, 0, 2) ):
Die CPU Auslastung bleibt genauso hoch als wenn Excel eine komplexe Calculate Berechnung durchführt - obwohl Excel ja nur wartet.
Habt Ihr hier einen "Trick" wie ich in dieser Warteschleife die CPU-Auslastung auf dem Kern runterfahren kann? Ich meine beim Einlesen einer komplexen .txt Datei ist die CPU-Auslastung auf 0 bis die .txt komplett eingelesen ist. Es gibt also Möglichkeiten im Wartemodus (wie auch immer der aussieht) Excel die CPU Power zu entziehen.

Der Hintergrund der Aktion ist, dass mein Notebook nur 2 Kerne hat. Wird einer komplett ausgelastet und das Notebook muss nun mit einem Kern in einem anderen Programm weiterarbeiten (Excel im .wait Modus) so steht hier nur noch ca. 80% der Rechenpower zur Verfügung da eben der 1. Kern durch Excel "reserviert" ist - mal abgesehen vom unnötigen Stromverbrauch.

Habt Ihr da Ideen wann Excel mal keine CPU Power benutzt (oder sehr wenig) bei welchen Ausführungen wenn ein Makro ausgeführt wird? Ich könnte ja da eine Schleife einbauen und immer wieder diese resourcenschonende Funktion einbauen bis Excel weitermachen soll...


Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro im Pausemodus: CPU-Auslastung trotzdem da, Workaround?
28.06.2024 12:08:38
daniel
Hi

der Workaround wäre:

1. Erstelle 2 Makros, eins für die Aufgaben vor der Pause und eins für die Aufgaben nach der Pause.
2. Rufe das zweite Makro für die Aufgaben nach der Pause mit Application.OnTime "Makroname", DatumUhrzeit auf.
damit startet das aufgerufene Makro zur angegebenen Uhrzeit, bis dahin steht dir Excel ganz normal zur Verfügung, dh du kannst mit Excel normal weiter arbeiten.

dabei ist es auch zulässig, dass sich das zweite Makro selbst aufruft, das wäre ideal für die Warteschleife aus deiner anderen Frage, falls der Prozess, auf den gewartet werden muss, länger dauert:

Sub Makro1()

...
Application.Ontime "Makro2", Now
end Sub

Sub Marko2()

If Dir("C:\xxxxxxx") = "" Then
Application.Ontime "Makro2", Now + TimeSerial(0, 0, 1)
Else
Hier der Code zum Bearbeiten wenn die Datei vorhanden ist
End if


Gruß Daniel


Anzeige
AW: Makro im Pausemodus: CPU-Auslastung trotzdem da, Workaround?
28.06.2024 13:38:31
Yal
Hallo Frank,

mit einem DoEvents in deiner Schleife wird Excel oder dem Prozessor genug Luft haben, um etwas anderes zu tun. Dein CPU-Belastung sollte sich damit bis zu wenige Prozent reduzieren.

Denk dran, bei solchen Schleifen, immer ein Ausstieg-Klausel einzubauen, sogenannten "Fallschirm".

Sub Marko2()

Dim Fallschirm As Long
Const Limit = 10000000

Do While Dir("C:\xxx") = ""
Fallschirm = Fallschirm + 1
If Fallschirm > Limit Then Exit Sub
DoEvents
Loop
'Hier der Code zum Bearbeiten wenn die Datei vorhanden ist
End Sub


Achte auch darauf, dass ein txt-Datei lesbar ist, auch wenn diese noch nicht vollständig geladen ist. Da Lesen schneller als Schreiben ist, wird oft in solchen Fälle nur einen Teil der endgültigen Datei gelesen. Idealerweise überträgt der Prozess zuerst in einer "meineDatei.tmp"-Textdatei der anschliessend von demselben Prozess in "meineDatei.txt" umbenannt ist.
Auch möglich: nach der Übertragung der "meineDatei.txt" eine leeren "meineDatei.binFertig"-Textdatei durch den Übertragunsprozess zu erzeugen. Dein Code müsste dann nur das Vorhandensein der ".binFertig"-Datei testen (es geht auch jegliche andere Endung).

VG
Yal
Anzeige
AW: Makro im Pausemodus: CPU-Auslastung trotzdem da, Workaround?
28.06.2024 16:26:33
Onur
DIESE Lösung verursacht 0,0% CPU-Auslastung:
DAS in ein Standardmodul:
Public Declare PtrSafe Function MessageBoxTimeoutA Lib "user32.dll" ( _

ByVal hWnd As LongLong, _
ByVal lpText As String, _
ByVal lpCation As String, _
ByVal uType As LongLong, _
ByVal wLanguageId As Integer, _
ByVal dwMiliseconds As LongLong) As Integer
Public Const MB_TIMEOUT As Long = &H7D00

Aufruf erfolgt z.B. so:
Private Sub CommandButton3_Click()

Dim antw, txt
txt = "Bitte warten oder mit 'OK' abbrechen"
antw = MessageBoxTimeoutA(Application.hWnd, txt, "Bitte warten !", vbApplicationModal, 0, 30000) '30000 = 30 Sekunden
End Sub
Anzeige
Yal's. Daniel's und Onur's Vorschlag:
30.06.2024 10:21:06
Frank Dreier
Yal's Vorschlag mit DoEvents funktioniert leider nicht, Excel nimmt keine Rücksicht darauf in diesem Fall.

Daniel's Lösung klappt und Onur's auch.

Das klassische

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


hat leider den Nachteil der 100% CPU Auslastung.

Ich möchte hier nochmal, in diesem Fall, die "Workaround" Lösung von Oberschlumpf anführen, da diese auch für eine Pause im Makro genutzt werden kann - bei 0% Auslastung der CPU:

CreateObject("WScript.Shell").Run Chr(34) & "C:\testbat.bat" & Chr(34), 1, True


Man braucht hier nur in der .bat Datei die Zeile: "Timeout 10" (für 10 Sekunden) hineinschreiben und erhält den gleichen Effekt wie oben mit der Excel-Warte-Funktion - nur eben, dass die CPU auf 0% ist in der Zeit.

Warum Excel in der Application.Wait Funktion den Kern mit 100% auslastet wird wohl ein Mysterium bleiben.

Vielen Dank an alle!
Anzeige
AW: Makro im Pausemodus: CPU-Auslastung trotzdem da, Workaround?
28.06.2024 14:09:28
daniel
Auch möglich: nach der Übertragung der "meineDatei.txt" eine leeren "meineDatei.binFertig"-Textdatei durch den Übertragunsprozess zu erzeugen.

andere Möglichkeit: der Batch-Job erzeugt zunächst die Datei "in Arbeit" und bennennt diese dann am Ende um mit dem eigentlichen Dateinamen, den auch das Makro verwendet.
dann braucht man keine zusätzliche Datei.

Gruß Daniel
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige