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

Forumthread: Makros auswerten - Zeit messen

Makros auswerten - Zeit messen
08.02.2016 16:58:28
SteffenS
Hallo Zusammen,
ich habe ein sehr komplexes Projekt mit vielen Makros, Unterfunktionen etc.
Da die Performance nicht unbedingt so toll ist, würde ich gern einmal im Detail analysieren, an welcher Stelle wieviel Zeit gebraucht wird.
Habt ihr eine Idee, wie ich so etwas machen kann oder gibt dazu ggf. auch eine Erweiterung?
Danke Euch schon mal.
Viele Grüße
Steffen Schmerler

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Makros auswerten - Zeit messen
08.02.2016 17:13:42
Michael
Hallo,
Am Anfang der sub eingeben:
MyStart = timer
Am ende der sub:
Msgbox timer - myStart
Mfg

AW: Makros auswerten - Zeit messen
08.02.2016 17:59:18
SteffenS
Hallo Zusammen,
danke erstmal für die schnelle Antwort.
Da meine Projekte recht komplex sind suche ich etwas was mehr ins Detail geht.
Was z.B.: die Zeit pro Abfrage, Schleife, Unterprozedur etc. ausgibt.
Habt ihr so etwas schon einmal gesehen, gehört?
Danke Euch schon mal.
VG
Steffen Schmerler

Anzeige
AW: Makros auswerten - Zeit messen
08.02.2016 18:13:02
Daniel
Hi
Im Prinzip so wie es dir Michael gezeigt hat:
am Anfang des zu messenden Programmabschnitts:
MyStart = Timer
hier der Code der auf Laufzeit zu überprüfen ist
Msgbox Timer - MyStart
das muss nicht zwingen am Anfang und Ende eines Makros stehen, dass kann auch mitten drin und mehrfach erfolgen.
Die Ausgabe muss auch nicht zwingend mit einer Messagebox erfolgen, wenn du mehrere Bereiche messen willst und das Makro ununterbrochen durchlaufen soll, du kannst die Zeitwerte auch mit Debug.Print im Direkfenster anzeigen lassen oder in ein Tabellen blatt schreiben:

MyStart = Timer
hier der Code
Debug.Print "Abschnitt 1:", Timer - MyStart

MyStart = timer
hier der Code
Zeile = Zeile + 1
Sheets("Durchlaufzeiten").Cells(Zeile, 2) = Timer - MyStart
Sheets("Durchlaufzeiten").Cells(Zeile, 1) = "Abschnitt 1"
das es dazu was fertiges gibt was du einfach nur answenden brauchst, glaube ich nicht, denn ausser dir kann ja niemand wissen, in welche Abschnitte das Programm sinnvoll geteilt werden muss.
Gruß Daniel

Anzeige
AW: Makros auswerten - Zeit messen
08.02.2016 18:13:45
Michael
Hallo!
Fertige Produkte kenne ich persönlich nicht, ich vermute da wirst Du Dir selbst was stricken müssen.
Was evtl noch hilfreich ist: http://www.vbaexpress.com/kb/getarticle.php?kb_id=1068
Lg
Michael

Anzeige
AW: Ergänzung - evtl. interessantes Tool
09.02.2016 08:34:53
Michael
Hallo Steffen!
Da Du ja offenbar sehr umfangreiche Entwicklungs-Projekte in VBA vorliegen hast, könnte hinsichtlich Aufräum-, Wartungsarbeiten und Testungen dieses Open Source Add-In für Dich interessant sein: http://rubberduckvba.com/
Ich weiß nicht ob Laufzeit-Berechnungen möglich sind, aber vielleicht sind die auch gar nicht mehr möglich, wenn Du Deine gesamten Projekte durch Unit-Tests schicken und so aufräumen kannst.
LG
Michael

Anzeige
AW: Makros auswerten - Zeit messen
08.02.2016 19:42:31
Piet
hallo
ich habe den Thread geade gelsen und bin kein Profi für das Problem.
Sage aber mal was ich als Laie in der Praxis mache ...
Im Makro schreibe ich mir am Anfang beim Start und am Ende die Zeiten in eine Zelle.
Laufen mehrere Makros die verschachtelt sind nimmt man einfach mehrere Zellen und
schaut wie lange jedes einzelne Programm gelaufen ist. (evtl. in seperater Tabelle)
Vielleicht nicht Profihaft, aber bei langen Zeiten könnte es helfen so dem Makro
auf die Spur zu kommen wo man suchen muss. (z.B. Ellenlange For Next Schleifen)
mfg Piet

Anzeige
AW: Makros auswerten - Zeit messen
09.02.2016 16:28:42
SteffenS
Hallo Zusammen,
danke für die vielen Infos.
Werde mich mit dem Tool rubberDuck mal näher beschäftigen.
Ein Problem habe ich schon gefunden :-)
Danke Euch schon mal.
VG Steffen

Doch noch kurze Frage
09.02.2016 16:44:37
SteffenS
Hallo Zusammen,
eine Frage habe ich noch.
Ist die Nutzung von
MyStart = Timer
Debug.Print WS.Name, Timer - MyStart, Now
Ein Problem für die Performance?
Ich hatte die Idee dies in jedes Makro an den Start und das Ende zu hängen und somit immer die genauen Zeiten verfügbar zu haben? Man könnte dieses ja auch noch ausbauen um den Makronamen etc...
Danke Euch schon mal
VG Steffen Schmerler

Anzeige
AW: Doch noch kurze Frage
09.02.2016 17:00:09
Daniel
Auf jeden fall kein so grosses, dass du es merken wirst.
Gruß Daniel

AW: Doch noch kurze Frage
09.02.2016 20:51:50
SteffeS
Hallo,
danke für den Tipp. Dann werde ich das mal angehen.
VG Steffen
;
Anzeige
Anzeige

Infobox / Tutorial

Makros auswerten und Zeit messen in Excel


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Neues Modul hinzufügen: Klicke mit der rechten Maustaste auf einen bestehenden VBA-Projektordner und wähle Einfügen > Modul.
  3. Timer-Variablen definieren: Füge am Anfang deines Makros folgende Zeile hinzu:
    MyStart = Timer
  4. Code ausführen: Füge den Code, dessen Laufzeit du messen möchtest, zwischen die Timer-Variablen ein.
  5. Endzeit messen: Am Ende des Codes füge eine Ausgabe hinzu:
    MsgBox Timer - MyStart

    Alternativ kannst du die Ergebnisse auch mit Debug.Print im Direktfenster anzeigen lassen:

    Debug.Print "Laufzeit:", Timer - MyStart
  6. Makro ausführen: Führe das Makro aus und beobachte die Ausgabe.

Häufige Fehler und Lösungen

  • Fehler: MyStart nicht definiert.

    • Lösung: Stelle sicher, dass MyStart vor der Verwendung deklariert wurde.
  • Fehler: Laufzeit wird nicht korrekt angezeigt.

    • Lösung: Vergewissere dich, dass der Code zwischen den Timer-Variablen korrekt gesetzt ist.
  • Fehler: Debug.Print zeigt keine Ausgabe.

    • Lösung: Überprüfe, ob das Direktfenster sichtbar ist (Strg + G im VBA-Editor).

Alternative Methoden

  • Zeiten in Zellen speichern: Anstatt nur in einer Messagebox oder im Direktfenster auszugeben, kannst du die Zeiten auch direkt in ein Tabellenblatt schreiben. Beispiel:
    Sheets("Durchlaufzeiten").Cells(Zeile, 1) = "Abschnitt 1"
    Sheets("Durchlaufzeiten").Cells(Zeile, 2) = Timer - MyStart
  • Rubberduck VBA: Nutze das Open Source Add-In Rubberduck VBA für zusätzliche Analysewerkzeuge und Unit-Tests.

Praktische Beispiele

  1. Durchlaufzeiten messen:

    Sub BeispielMakro()
       Dim MyStart As Double
       Dim Zeile As Long
       Zeile = 1
    
       MyStart = Timer
       ' Hier kommt der Code, dessen Laufzeit du messen möchtest
       Debug.Print "Abschnitt 1:", Timer - MyStart
    
       ' Weitere Abschnitte
       MyStart = Timer
       ' Code für Abschnitt 2
       Sheets("Durchlaufzeiten").Cells(Zeile, 1) = "Abschnitt 2"
       Sheets("Durchlaufzeiten").Cells(Zeile, 2) = Timer - MyStart
    End Sub
  2. Prozesszeiten messen:

    Sub ProzessMessen()
       Dim MyStart As Double
       MyStart = Timer
       ' Code für den Prozess
       Debug.Print "Prozessdauer:", Timer - MyStart
    End Sub

Tipps für Profis

  • Überlege, ob du die Zeitmessung direkt am Anfang und Ende jeder Funktion oder Prozedur anwendest, um die Performance genau zu analysieren.
  • Verwende Debug.Print um die Laufzeiten zu protokollieren, ohne die Benutzeroberfläche mit Messageboxen zu stören.
  • Experimentiere mit verschiedenen Zeitmessmethoden, um die für dein Projekt passende zu finden.

FAQ: Häufige Fragen

1. Kann ich die Zeitmessung in jeder VBA-Prozedur verwenden? Ja, du kannst Timer in jeder Prozedur oder Funktion verwenden, um Laufzeiten zu messen.

2. Beeinträchtigt die Verwendung von Debug.Print die Performance? Die Auswirkungen sind minimal, aber bei sehr häufigen Aufrufen kann es zu einer leichten Verlangsamung kommen.

3. Wie kann ich die Zeiten in einem bestimmten Format anzeigen? Du kannst die Ausgabe in ein Format deiner Wahl umwandeln, z.B.:

MsgBox Format(Timer - MyStart, "0.00") & " Sekunden"

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