Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel nach Makro sehr langsam

Forumthread: Excel nach Makro sehr langsam

Excel nach Makro sehr langsam
04.12.2002 15:04:43
Uwe
Schönen guten Tag auch,

nach dem ausführen eines Makros ist Excel sehr langsam.
Die CPU-Belastung ist auch fast 0.
Im Makro selbst werden einige Dateien über das Netzwerk geöffnet, ein paar Stellen gesucht, kopiert und die Dateien wieder geschlossen.
Das Makro selbst ist mir nicht zu langsam.
Nach einem Neustart von Excel ist alles wieder in Ordnung.

Wer kann mir helfen?
Gibt es "Default" Werte die mann im Makro setzen kann?

Vielen Dank
Grüsse an alle

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Excel nach Makro sehr langsam
04.12.2002 16:05:25
Hajo_Zi
Hallo Uwe

leider hast Du niochts zu Deinem Makro geschrieben. Arbeitest Du mit set dann lösche den Speicher zum Ende wieder mit Set Variable=""

Gruß Hajo

Re: Excel nach Makro sehr langsam
04.12.2002 16:42:27
Uwe
Hallo Hajo,

am einfachsten ist wohl in poste mal einen Teil des Makros. Dann wirds wohl einfacher.

Sub Laufzeiten() '
' Makro zur automatischen Aktualisierung der Prüfstandsbelegung
' Makro erstellt am 03.12.2002
'

Dim Pfad1, Pfad, Datei1, Verzeichnis As String 'Variablendeklaration
Dim Datum, Zeit As Date
Dim Bstd_PL, Bstd_Mot As Double
Dim Länge As Long
Dim i As Integer

Application.ScreenUpdating = False 'Auffrischung des Bildschirms verhindern
Application.Calculation = xlManual

'==============================================================================
'Bezugsdaten
Worksheets("Laufzeiten").Activate 'Tabelle Pfade aktivieren
Range("J1").Select 'Zelle J1 markieren
ActiveCell.Value = Date 'Datum eintragen
Range("N1").Select 'Zelle N1 markieren
ActiveCell.Value = Time 'Uhrzeit eintragen
'==============================================================================
'Prüfstand 1
ChDir "\\Pst_1\C\MGG_Prog\config" 'Verzeichniswechsel

Workbooks.OpenText Filename:="\\Pst_1\C\MGG_Prog\config\Pst_01.ini", Origin:= _
xlWindows, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, _
1), Array(50, 1), Array(52, 1), Array(55, 1), Array(58, 1))
ActiveWindow.SmallScroll Down:=201 'PST_01.ini öffnen

Cells.Find(What:="group3=1, 201, 300, C:\MGG_Prog\daten", After:=ActiveCell _
, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False).Activate
Cells.FindNext(After:=ActiveCell).Activate 'Nach Pfadangabe suchen

ActiveCell.Select 'Pfad erxtrahieren
Pfad1 = ActiveCell.Value
Länge = Len(Pfad1)
Verzeichnis = Mid(Pfad1, 39)
Länge = Len(Verzeichnis)
Verzeichnis = Left(Verzeichnis, Länge - 3)

ActiveWorkbook.Close savechanges:=False 'Datei schliessen

Pfad = "\\Pst_1\C\MGG_Prog\Daten\" & Verzeichnis & "\Laufzeiten"
'Vollständiger Pfad in Variable

ChDir Pfad 'Pfadwechsel

Worksheets("Pfade").Activate 'Tabelle Pfade aktivieren
Range("A1:A50").Select 'Spalte A markieren

Selection.ClearContents 'Alten Inhalt löschen
Range("A1").Select 'Zelle A1 markieren

Datei1 = Dir$(Pfad & "\*.*") 'Dateien in Verzeichnis auflisten
Do While Datei1 <> ""
ActiveCell.Offset(i, 0) = Datei1
i = i + 1
Datei1 = Dir$()
Loop

Range("A1").Select 'Sortieren nach Name
Selection.CurrentRegion.Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

[A1].Select 'Zelle A1 markieren
ActiveCell.End(xlDown).Select 'Letzte Zelle suchen (neuste Datei)

Datei1 = Pfad & "\" & ActiveCell.Value 'ZU öffnende Datei (Pfad und Name) in Datei1

Workbooks.Open (Datei1) 'Datei öffnen

[A4].Select 'Zelle A4 markieren
ActiveCell.End(xlDown).Select 'Letzte Zelle markieren (Datum)
Datum = Format(ActiveCell.Value, "mm.dd.yy") 'Datum formatieren / Wert in Variable

[B4].Select 'Zelle B4 markieren
ActiveCell.End(xlDown).Select 'Letzte Zelle markieren (Uhrzeit)
Zeit = ActiveCell.Value 'Wert in Variable (Uhrzeit)

[F4].Select 'Zelle F4 markieren
ActiveCell.End(xlDown).Select 'Letzte Zelle markieren (Stunden Prüflauf)
Bstd_PL = ActiveCell.Value 'Wert in Variable (Stunden Prüflauf)

[G4].Select 'Zelle G4 markieren
ActiveCell.End(xlDown).Select 'Letzte Zelle markieren (Stunden Motor)
Bstd_Mot = ActiveCell.Value 'Wert in Variable (Stunden Motor)

ActiveWorkbook.Close savechanges:=False 'Datei schliessen


Worksheets("Laufzeiten").Activate 'Tabelle Pfade aktivieren

Range("K11").Select 'Zelle K11 markieren
ActiveCell = Bstd_PL 'Variable in Zelle schreiben (Std. Prüflauf)

Range("L11").Select 'Zelle L11 markieren
ActiveCell = Bstd_Mot 'Variable in Zelle schreiben (Std. Motor)

Range("AA11").Select 'Zelle AA11 markieren
ActiveCell = Datum 'Variable in Zelle schreiben (Bezugsdatum)

Range("AC11").Select 'Zelle AC11 markieren
ActiveCell = Zeit 'Variable in Zelle schreiben (Bezugszeit)
'================================================================================================

Der Rest des Makros ist praktisch gleich mit anderen Pfadangaben und anderen Dateinamen.

Gruß Uwe

Anzeige
Re: Excel nach Makro sehr langsam
04.12.2002 16:57:47
Hajo_Zi
Hallo Uwe

in Deinem Code sehe ich nichts außergewöhnliches. Obwohl ich zugeben muß mit einer Ini datei habe ich noch nicht gearbeitet. Ich würde nur in Deinem Code auf Select und ähnliche Befehle verzichten.

Gruß Hajo

Re: Excel nach Makro sehr langsam
04.12.2002 18:27:13
Sören
Hallo Hajo,

hat jetzt nichts mit diesem Problem hier direkt zu tun, aber besser ist es am Ende mit "Set Variable=Nothing" zu schliessen.

Sören

Anzeige
Re: Excel nach Makro sehr langsam
04.12.2002 18:28:56
Hajo
Hallo Sören

Danke für den Hinweis, ich habe es nu´r aus der erinnerung geschreiben. Ich setze fast nicht Set ein.

Gruß Hajo

Re: Excel nach Makro sehr langsam
04.12.2002 18:35:29
Sören
Hallo Hajo,

war keine Kritik! Wollte es nur hierher schreiben, damit andere beide Möglichkeiten erfahren. Der Speicher wird eben nur durch "=Nothing" freigegeben. Mit " ="" " bleibt ein Leerstring im Speicher.

Sören

Anzeige
Re: Excel nach Makro sehr langsam
04.12.2002 18:43:47
Hajo
Hllo Sören

als Kritik habe ich das auch nicht gesehen. Man kan nicht alles über Excel wissen.

Gruß Hajo

Re: Excel nach Makro sehr langsam
05.12.2002 08:00:13
Uwe
Hallo Hajo,

erstmal danke für deine Vorschläge so wird ja auch der Code kürzer und "objektorientierter".

Aber mir ist nicht klar was der Verzicht auf "Select" usw. bringt, da mir das Makro selbst eigentlich gar nicht zu langsam ist. Die Zugriffe über das Netz brauchen halt ihre Zeit.
Vielmehr ist Excel selbst nach ausführen des Makros zu langsam, so als ob keine "Systemleistung" zur Verfügung steht ==> das ist aber nicht der Fall.

Die Sache mit der ini-Datei ist diese:
In der ini steht der aktuelle Pfad zu der Datei wo es drauf ankommt ich lese (suche) hier nur den entsprechenden Pfad.
Mit diesem Pfad (ändert sich fast täglich) öffne ich eine ASCII-Datei und lese ein paar Werte aus.
Excel müsste es doch eigentlich egal sein was es für eine Datei ist, solange es sie lesen kann.

Gruß Uwe

Anzeige
Re: Excel nach Makro sehr langsam
05.12.2002 08:03:23
Hajo_Zi
Hallo Uwe

das verzichten auf Select hat nur den Vorteil Zeit und das Flakkern des Bildschirmes wird verhindert. Der Bildschirmaufbau kostet auch Zeit.

Gruß Hajo

Re: Excel nach Makro sehr langsam
05.12.2002 08:14:13
Uwe
Hallo Hayo,

das ist ja aber nur während der Laufzeit des Makros der Fall
aber danach ?
Gibt es denn keinen Befehl der Excel in den "Startzustand" setzt?
Weil nach einem Programneustart ist es wieder i.O.

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Excel nach Makro sehr langsam


Schritt-für-Schritt-Anleitung

  1. Makro-Optimierung: Beginne damit, unnötige Select- und Activate-Befehle in deinem Makro zu vermeiden. Diese Befehle können die Ausführung verlangsamen und die Systemressourcen unnötig beanspruchen.

  2. Ressourcenmanagement: Verwende am Ende des Makros Set Variable = Nothing, um den verwendeten Speicher freizugeben. Dies hilft, die Excel-Datei zu optimieren und kann die Geschwindigkeit verbessern, wenn Excel extrem langsam läuft.

  3. Berechnungsmodus anpassen: Setze am Anfang deines Makros Application.Calculation = xlManual. Dies verhindert, dass Excel während des Makro-Laufs ständig Berechnungen durchführt, was die Ausführung verlangsamen kann. Vergiss nicht, nach dem Makro Application.Calculation = xlAutomatic zu setzen.

  4. Bildschirmaktualisierung deaktivieren: Setze Application.ScreenUpdating = False am Anfang des Makros, um das Flackern des Bildschirms zu verhindern. Aktiviere die Bildschirmaktualisierung am Ende wieder mit Application.ScreenUpdating = True.

  5. Netzwerkverbindungen prüfen: Wenn dein Makro Dateien über das Netzwerk öffnet, kann dies zu längeren Ladezeiten führen. Stelle sicher, dass die Netzwerkverbindung stabil ist und die Dateien erreichbar sind.


Häufige Fehler und Lösungen

  • Excel läuft sehr langsam nach dem Makro: Überprüfe, ob alle Variablen ordnungsgemäß freigegeben werden. Verwende Set Variable = Nothing, um sicherzustellen, dass der Speicher richtig freigegeben wird.

  • Die CPU-Belastung ist niedrig, aber Excel ist extrem langsam: Dies kann darauf hindeuten, dass Excel in einen Zustand geraten ist, in dem es nicht richtig auf Anforderungen reagiert. Ein Neustart von Excel kann oft helfen.

  • Excel Tabelle sehr langsam beim Öffnen von Dateien: Achte darauf, dass du beim Öffnen von Dateien im Makro effiziente Methoden verwendest. Vermeide es, das gesamte Arbeitsblatt zu aktivieren, wenn nur bestimmte Zellen benötigt werden.


Alternative Methoden

  • VBA-Prozeduren optimieren: Anstatt umfangreiche Schleifen zu verwenden, kannst du auch Array-Methoden in VBA verwenden, um Daten schneller zu verarbeiten.

  • Daten in einer Datenbank speichern: Wenn du regelmäßig große Datenmengen verarbeiten musst, kann es sinnvoll sein, diese in einer Datenbank zu speichern und über SQL-Abfragen in Excel zu importieren.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du dein Makro optimieren kannst:

Sub OptimiertesMakro()
    Dim ws As Worksheet
    Dim pfad As String

    Application.ScreenUpdating = False
    Application.Calculation = xlManual

    Set ws = ThisWorkbook.Sheets("Daten")

    ' Beispiel Datenverarbeitung
    pfad = "\\DeinNetzwerkpfad\Datei.txt"
    ' Hier kann der Code zum Öffnen und Bearbeiten der Datei folgen

    Application.Calculation = xlAutomatic
    Application.ScreenUpdating = True
End Sub

Tipps für Profis

  • Verwendung von With-Statements: Reduziere die Anzahl der With-Statements für wiederholte Objekte, um die Lesbarkeit und Effizienz des Codes zu verbessern.

  • Debuggen: Nutze den Debugger in VBA, um herauszufinden, wo genau das Makro langsamer wird und optimiere diese Stellen gezielt.

  • Makros regelmäßig testen: Führe dein Makro regelmäßig unter verschiedenen Bedingungen aus, um sicherzustellen, dass es auch bei größeren Datenmengen schnell und effizient bleibt.


FAQ: Häufige Fragen

1. Warum ist Excel nach dem Ausführen eines Makros so langsam?
Die häufigste Ursache ist, dass Excel nicht in den "Startzustand" zurückgesetzt wird. Setze Application.Calculation und Application.ScreenUpdating zurück, um die Leistung zu verbessern.

2. Was kann ich tun, wenn Excel extrem langsam läuft?
Überprüfe deine Makros auf ineffiziente Codeteile. Reduziere die Verwendung von Select und Activate und stelle sicher, dass alle Variablen nach der Verwendung freigegeben werden.

3. Gibt es einen Befehl, um Excel in den ursprünglichen Zustand zu versetzen?
Es gibt keinen spezifischen Befehl dafür, aber das Zurücksetzen der Berechnungs- und Bildschirmaktualisierungseinstellungen am Ende deines Makros kann das Problem oft lösen.

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