Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CPU Auslastung 100% bei Macros

Forumthread: CPU Auslastung 100% bei Macros

CPU Auslastung 100% bei Macros
10.07.2006 12:47:12
Heinzs
Hallo,
ich habe ein Excelmakro, daß permanent in 10 Minuten Abstand zwei Verzeichnisse inhaltsmäßig vergleicht. Dieses klappt auch wunderbar, außer: Die COU Auslastung beträgt immer 100%; der PC ist für nichts anderes mehr benutzbar.
Fragfe: Wie kann ich die CPU Auslastung des MAcros begrenzen; d.h. es so einstellen, daß dieses MAcro nur 10 % CPU Auslastung nimmt?
Danke für Hilfe
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CPU Auslastung 100% bei Macros
10.07.2006 13:37:28
Michael
Hallo Heinz
versuch mal im Taskmanager die priorität für den Prozess vom Excel(Makro läuft doch im Excel oder?) auf niedrig zu stellen dann sollte er ned zu viel Auslastung verursachen...
mfg
Michael
AW: CPU Auslastung 100% bei Macros
10.07.2006 13:41:50
fcs
Hallo Heinz,
wahrscheinlich benutzt du Wait oder eine andere Schleifen-Operation. Dadurch wird Ecxel blockiert.
Arbeite mit der OnTime -Methode, dann spürts du die Auslastung praktisch nicht. Beispiel:

Code in "DieseArbeitsmappe":
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
' ggf. noch aktive Processe schliessen
Application.OnTime earliesttime:=Termin1, procedure:="VerzeichnisAktualisieren", schedule:=False
End Sub
Code in einem Modul:
Public Termin1 As Date
Sub VerzeichnisAktualisieren()
'Code zum Verzeichnis aktualisieren
Termin1 = Now + 600 / 24 / 3600  'Aufruf im 600-Sekundentakt
Application.OnTime earliesttime:=Termin1, procedure:="VerzeichnisAktualisieren", Latesttime:=Termin1 + 30 / 24 / 3600
End Sub

Dabei darfs du im Code nicht mit ActiveCell, ActiveSheet, ActiveWorkbook oder ähnlichem arbeiten, da es sonst Fehler gibt. Du muß in einem entsprechendem Initialisierungsmakro als Public deklarierte Objekte verwenden oder Zellen, Blätter, Mappen immer mit ihrem vollem Namen ansprechen.
gruss Franz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

CPU-Auslastung bei Excel-Makros reduzieren


Schritt-für-Schritt-Anleitung

  1. Öffne den Task-Manager:

    • Drücke Strg + Shift + Esc, um den Task-Manager zu öffnen.
  2. Finde den Excel-Prozess:

    • Suche nach dem Excel-Prozess, der dein Makro ausführt.
  3. Priorität ändern:

    • Klicke mit der rechten Maustaste auf den Prozess und wähle „Priorität festlegen“.
    • Setze die Priorität auf „Niedrig“. Dies sollte helfen, die CPU-Auslastung zu begrenzen, sodass die CPU nicht permanent auf 100% läuft.
  4. Verwende die OnTime-Methode:

    • Implementiere die OnTime-Methode in deinem Makro, um die Auslastung zu optimieren. Diese Methode erlaubt es dir, das Makro in festgelegten Intervallen auszuführen, ohne die CPU voll auszulasten.
  5. Code anpassen:

    • Achte darauf, im Code nicht auf ActiveCell, ActiveSheet oder ActiveWorkbook zuzugreifen, um Fehler zu vermeiden. Verwende stattdessen die vollständigen Namen der Objekte.

Häufige Fehler und Lösungen

  • Makros blockieren Excel:

    • Wenn deine Excel-Makros werden blockiert, könnte dies an einer falschen Schleifen-Operation liegen. Verwende stattdessen die OnTime-Methode.
  • CPU permanent auf 100:

    • Überprüfe deine Makros auf unnötige Schleifen oder Wait-Befehle, die die CPU dauerhaft auslasten.
  • Hohe CPU-Auslastung:

    • Wenn die CPU bei 100% ist, versuche, die Priorität des Excel-Prozesses im Task-Manager zu senken.

Alternative Methoden

  • Verwendung von Timer:

    • Du kannst auch Timer-Funktionen in VBA verwenden, um bestimmte Aufgaben in Intervallen auszuführen. Dies verringert die CPU-Auslastung erheblich.
  • Optimierung des Codes:

    • Überprüfe und optimiere deinen VBA-Code, um unnötige Berechnungen zu vermeiden, die die CPU unnötig belasten.

Praktische Beispiele

Hier ist ein einfacher Code, der die OnTime-Methode verwendet, um eine wiederkehrende Aufgabe im 10-Minuten-Takt auszuführen:

Public Termin1 As Date

Sub VerzeichnisAktualisieren()
    ' Code zum Verzeichnis aktualisieren
    Termin1 = Now + TimeValue("00:10:00") ' 10 Minuten
    Application.OnTime earliesttime:=Termin1, procedure:="VerzeichnisAktualisieren"
End Sub

Stelle sicher, dass du die Funktion VerzeichnisAktualisieren entsprechend anpasst, um die CPU-Auslastung zu minimieren.


Tipps für Profis

  • Debuggen des Codes:

    • Verwende die Debugging-Tools in Excel, um ineffiziente Bereiche in deinem Code zu identifizieren, die die CPU voll auslasten.
  • Objekte effizient nutzen:

    • Vermeide es, häufig auf ActiveCell und ActiveSheet zuzugreifen. Dies kann die Leistung deines Makros negativ beeinflussen.
  • Prozesse im Hintergrund:

    • Wenn möglich, führe CPU-intensive Aufgaben in separaten Prozessen aus, um die Hauptanwendung zu entlasten.

FAQ: Häufige Fragen

1. Wie kann ich die CPU-Auslastung bei Excel-Makros reduzieren?
Verwende die OnTime-Methode, um die Ausführung deines Makros zu planen, und ändere die Priorität im Task-Manager auf „Niedrig“.

2. Warum ist die CPU permanent auf 100%?
Das kann an ineffizienten Schleifen oder dem Einsatz von Wait-Befehlen in deinem Makro liegen. Optimiere deinen Code und verwende die OnTime-Methode.

3. Was kann ich tun, wenn Excel-Makros blockiert werden?
Überprüfe deinen Code auf Schleifen und übermäßige Berechnungen und passe die Priorität des Excel-Prozesses im Task-Manager an.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige