Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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 langsamer wenn man z.B. zum Arbeitsplatz wechselt!

Makro langsamer wenn man z.B. zum Arbeitsplatz wechselt!
09.02.2024 13:01:33
Frank Dreier
Hallo Leute,

wieder ein merkwürdiges Phänomen: (4-Kern Prozessor)

Wenn man ein aufwendiges Makro startet, das z.B. 20 Sekunden benötigt um durchzulaufen und man das Makro ausführt und das Excel-Fenster aktiv lässt, dauert der Spaß 20 Sekunden.
Wenn allerdings das Fenster von Excel nicht mehr aktiv ist, z.B. man wechselt einfach nur zum Arbeitsplatz oder in den leeren Browser, verlangsamt sich die Berechnungszeit auf fast 30 Sekunden (CPU-Kern gleich ausgelastet bei beiden Methoden, lt. Taskmanager, 25% bei 4 Kernen). Habe auch schon Excel Priorität auf Echtzeit hochgesetzt, trotzdem gleiches Bild. (Dachte das wenn Fenster nicht aktiv ist Windows automatisch die zugewiesene Berechnungspower reduziert- auch wenn es im Taskmanager nicht angezeigt wird, dass eine Reduzierung der CPU last vorliegt).

Kennt Ihr dieses Phänomen?
Komischerweise kann ich das mit diesem einfachen, aber langen Makro nicht reproduzieren, immer 20 sekunden Berechnungszeit, egal ob ich zum Arbeitsplatz wechsle oder in den leeren Browser gehe.

Range("A2:DA200000").Value = Range("EA2:HA200000").Value


Vielleicht weiß einer warum das bei komplexeren Makros so ist?

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro langsamer wenn man z.B. zum Arbeitsplatz wechselt!
09.02.2024 13:14:52
daniel
keine Ahnung, aber ich vermute mal, dass ein Arbeitsschritt immer als Block ausgeführt werden muss
erst wenn du mehrere Arbeitsschritte hast, kann das Betriebssystem dazwischenfunken und sagen: "warte mal, es gibt grad wichtigeres zu tun". Aber wenn der Schritt mal gestartet ist, dann wird er zu Ende ausgeführt.

deine Datenmengen werden ja immer größer. Gestartet bist du mit einer Zelle, jetzt sinds plöztlich 20 Millionen.
Wo willst du enden?
nur so als Tipp: bei der Datenmenge sollte das Copy-Paste dem .Value = .Value überlegen sein. Warum, hatte ich an anderer Stelle geschrieben.
Gruß Daniel
Anzeige
AW: Makro langsamer wenn man z.B. zum Arbeitsplatz wechselt!
09.02.2024 13:20:50
Frank Dreier
Hallo Daniel,

das dient nur dazu, dass die Berechnungszeit lange genug ist um einen Unterschied festzustellen. Ich teste gerade mal alle unterschiedlichen Blöcke durch. Bis jetzt konnte ich den Übeltäter noch nicht identifizieren.
Einfüge-Funktionen, Berechnungen laufen in beiden Varianten gleich schnell durch. Ich lasse es wissen wo Excel hängt. Ich vermute, dass das nur bei einigen Anweisungen der Fall ist, hier allerdings dann mit massiven Auswirkungen. (in meiner Datei von 20 auf 30 sekunden)

AW: Makro langsamer wenn man z.B. zum Arbeitsplatz wechselt!
09.02.2024 14:15:50
onur
Ich vermute mal, es liegt an "großen" Schleifen.
Meines Wissens nach heisst es zwar "VBA-Compiler", aber in Wirklichkeit ist es ein Interpreter.
d.H. bei dem Code mit nur einer Zeile wird diese Zeile 1x in Maschinencode übersetzt und ausgeführt. Bei einem Code mit mehr Zeilen, insbesondere bei Schleifen, wird jede einzelne Zeile (ebenso jeder Schleifendurchlauf) in Maschinencode übersetzt und ausgeführt. So kann eine Schleife mit 3 Zeilen und 1000 Durchläufen schnell zu 1003 "Zeilen" werden, die übersetzt werden müssen.
Wenn Apps im Hintergrund etwas langsamer laufen als im Vordergrund, kann sich das dann aufsummieren zu 10 sec Unterschied.
Anzeige
AW: Makro langsamer wenn man z.B. zum Arbeitsplatz wechselt!
09.02.2024 14:46:02
schauan
Hallöchen,

1)
probiere mal im VBA-Editor Menü | Debuggen | Kompilieren von VBA-Projekt.
Schaue dort auch immer mal rein, ob das wieder aktiv ist, .B. nach Änderungen.
(Wobei ich damit onur nicht widersprechen möchte :-) )

2)
Bei umfangreicheren Projekten macht es sich zuweilen auch bemerkbar, wenn Du alle Module / Codes exportierst, die Datei als xlsx speicherst und schließt - oder Du hast eine entsprechende Vorlage - und die Module / Codes dann wieder rein holst. Hat zuweilen auch Auswirkungen auf die Dateigröße oder unerklärliche Fehler ..

Onur, schauan
09.02.2024 15:50:28
Frank Dreier
Hi, danke Euch beiden. Ja, ich habe Schleifen drin, das stimmt. Erster Hinweis bei De-Aktivierung des Excel-Fensters bzw. Wechsel zum Arbeitsplatz ist, dass innerhalb eines Moduls alles normal schnell läuft- egal was Du sonst am Computer anklickst/aktivierst. Wenn Dein Makro allerdings über mehrere Module geht, scheint es ein Problem zu geben. Ich teste das noch ausführlich und melde mich dann. Ich werde auch versuchen den Fehler dann in einem einfachen Makro-Ablauf zu reproduzieren, dann könnt Ihr damit, falls Interesse, selber ausprobieren.

Anzeige
Habe den Fehler gefunden, allg. Problem Excel od. Win!
09.02.2024 16:27:32
Frank Dreier
Hallo Leute,

Nach diversen Tests weiß ich nun zumindest woran es liegt.
Es liegt nicht an einzelnen VBA-Funktionen/Copy Paste etc. - alles läuft langsamer ab.

Es liegt am De-Aktivieren des Fensters von Excel, also z.B. Focuswechsel auf den Arbeitsplatz/leeren Browser nach dem Start des Makros, jetzt aber das Kuriose:
Wenn Du innerhalb der Berechnung dann auf das Excel-Fenster zurückwechselst erhöht sich der Speed sofort! Und: Wenn Du dann wieder wechselst auf den Arbeitsplatz/Browser bleibt der Speed erhalten!

Es gibt nun 2 Möglichkeiten:
1. Entweder schiebt Excel selber die Berechnung in den Hintergrund (wird langsamer) wenn der Fokus nach dem Wechsel auf ein anderes Programm/Browser etc. passiert. Kehrt man zurück, erhöht sich der Speed sofort und Excel bleibt dann dabei und senkt den Speed nicht wieder ab.
2. Windows selber reduziert automatisch den Speed/CPU-Zuweisung bei Anwendungen bei De-Aktivierung des Fensters. Kehrt man zurück, erhöht Windows den Speed sofort und bei nochmaliger Re-Aktivierung fährt Windows den Speed nicht mehr herunter.

Die Reduzierung des Speeds beträgt ca. 20-25%. Im Taskmanager und diversen anderen Tools zur CPU-Nutzung sieht man keinen Unterschied bei beiden Methoden- was wohl nicht stimmt. Das deutet dann auf ein Windows-Problem hin, da sonst im Taskmanager eine CPU-Usage Reduzierung von Excel ja angezeigt werden würde.

Ich werde mal versuchen das Problem mit einem Programm zu umgehen, was das Fenster immer im Vordergrund lässt, aber eine Dauerlösung ist das nicht.
Evtl. finde ich ja ein VBA-Befehl der den Fokus kurz wieder auf das Excel-Fenster zieht, damit wäre das Problem ja gelöst oder man startet eine batch-Datei aus dem Makro heraus welches dann den das Excel-Fenster wieder kurz reaktiviert.

Auch am Powermanagement liegt es glaube nicht, da ich die Tests hier am PC durchführe, also nicht am Laptop wo evtl. solche Maßnahmen von Hause aus (Intel, Lenovo) mitgegeben werden. Interessant, dass dieses Problem noch nicht groß thematisiert wurde im Netz. Ich würde natürlich lieber die Lösung wissen als diese Workarounds.

Anzeige
AW: Habe den Fehler gefunden, allg. Problem Excel od. Win!
09.02.2024 16:38:25
schauan
Hallöchen,

schaue Dir im System mal die Priorisierung der Apps an ...
AW: Habe den Fehler gefunden, allg. Problem Excel od. Win!
09.02.2024 19:52:04
onur
Wenn du so viel Spass an sowas hast, lade dir "AnVir Task Manager Free" runter. Da kriegst du tonnenweise Informationen.
Schauan
09.02.2024 17:17:29
Frank Dreier
Hi,

also im Taskmanager kann ich Excel auf Hoch setzen oder auch Echtzeit- bringt alles nix aber danke für den Tip
Workaround der zumindest funktioniert:
09.02.2024 17:26:34
Frank Dreier
Diesen Code ins Modul und danach erst mit Sub weitermachen:

Option Explicit


'siehe: http://www.vbarchiv.net/api/api_bringwindowtotop.html

Declare Function BringWindowToTop Lib "user32.dll" (ByVal hwnd As Long) As Long



Sub test()


Shell "Explorer.exe", vbNormalFocus
Application.Wait (Now + TimeValue("0:00:01"))
Dim Retval As Long
Retval = BringWindowToTop(Excel.Application.hwnd)

End Sub


Damit öffnet und wechselt Excel zunächst gleich am Anfang zum Explorer und danach sofort wieder zurück zu Excel. Damit ist der vorher beschriebene Prozess (Makro starten, Fensterwechsel, Wechsel zurück zu Excel) automatisiert und es läuft immer schnell ab.

-Das ist natürlich ein Witz, diese Lösung, aber anders kann ich mir gerade nicht helfen.

Leider ist damit immer noch nicht klar wer beim Fensterwechsel Excel ausbremst: Windows oder Excel selber. Aber ich vermute ganz stark das es Windows selber ist.
Anzeige
Hier die Erklärung gefunden im Netz:
09.02.2024 19:31:19
Frank Dreier
Das habe ich dazu gefunden. Windows nimmt, wie vermutet, einfach CPU Power weg wenn man das Fenster nicht im Vordergrund hat. Wie man das ausschalten kann weiß ich leider nicht. Hier der Auszug:

You should realize that the macro running in the background instance of Excel will be affected by you working on a different instance of Excel in the foreground. This, again, is related to how Windows treats different programs. On most systems, the background programs are given a smaller percentage of the CPU's attention than the foreground program.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige