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

Wie lange dauert es mein Makro auszuführen

Forumthread: Wie lange dauert es mein Makro auszuführen

Wie lange dauert es mein Makro auszuführen
24.07.2017 14:58:37
Jenny
Hallo,
mal eine Frage, gibt es die Möglichkeit, dass mir nachdem mein Bisheriges Makro durchgelaufen ist, in einer Message Box in Min und Sek angezeigt wird, wie lange es gedauert hat?
Viele Grüße
Jenny
PS: Das Makro wird gerade ausgeführt, wenn ihr das Makro braucht um mir zu helfen, kann ich es nach dem Ausführen gerne noch nachreichen.
Jenny
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Makro
24.07.2017 15:09:03
Jenny
Eins noch, kann man das darauf beschränken, dass die Message Box nur erscheint, wenn vorher 10.000 oder mehr Zellen in Spalte E geändert wurden?
Weder bei weniger Zellen in Spalte E, noch bei Änderungen in Spalte G.
Gruß
Jenny
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TC As Long
Dim c As Range
Application.ScreenUpdating = False
If Target.Columns.Count > 1 Then Exit Sub
If Target.Column = 5 Or Target.Column = 7 Then TC = Target.Column Else Exit Sub
'If Target.Count = 1 And Target  "" Then
On Error GoTo ERREXIT
Application.EnableEvents = False
Select Case TC
Case 5: For Each c In Target
If c  "" Then Call SpalteE(c)
Next
Case 7: For Each c In Target
If c  "" Then
Call SpalteG(c)
Call SpalteE(c)
End If
Next
End Select
ERREXIT:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Sub SpalteG(ByVal Target As Range)
Dim r As Range, c As Range, z&, cc As Range, zf&
Dim gefunden As Boolean
If Target.Offset(, -6)  "" Then
z = Target.Row
gefunden = False
Set cc = Range("A1:A" & z - 1).Find(Target.Offset(, -6).Value, _
Range("A1"), xlValues, xlWhole)
If Not cc Is Nothing Then
zf = cc.Row
Do
Set cc = Range("A1:A" & z - 1).FindNext(cc)
If cc.Offset(, 6) = Target Then
Target.Offset(, -2) = cc.Offset(, 4) '& " " & (cc.Offset(, 4).Address)
gefunden = True
End If
Loop Until cc Is Nothing Or cc.Row = zf Or gefunden
End If
If Not gefunden Then Target.Offset(, -2).Value = "n.v."
End If
End Sub
Sub SpalteE(ByVal Target As Range)
Dim lngR As Long
lngR = Target.Row
Cells(lngR, 2).FormulaR1C1 = Cells(1, 2).FormulaR1C1
Cells(lngR, 3).FormulaR1C1 = Cells(1, 3).FormulaR1C1
Cells(lngR, 6).FormulaR1C1 = Cells(1, 6).FormulaR1C1
Cells(lngR, 8).FormulaR1C1 = Cells(1, 8).FormulaR1C1
Cells(lngR, 9).FormulaR1C1 = Cells(1, 9).FormulaR1C1
Cells(lngR, 10).FormulaR1C1 = Cells(1, 10).FormulaR1C1
Cells(lngR, 11).FormulaR1C1 = Cells(1, 11).FormulaR1C1
Cells(lngR, 12).FormulaR1C1 = Cells(1, 12).FormulaR1C1
Rows(lngR).Copy
Cells(lngR, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Target.Select
End Sub

Anzeige
AW: Wie lange dauert es mein Makro auszuführen
24.07.2017 15:09:48
Max2
Hallo,
was macht dein Code, dass du die Zeit in Minuten und Sekunden haben willst?
Makro Codes sollten nicht länger als ein paar wenige Sekunden dauern.
Hier aber eine Möglichkeit die Zeit auszugeben:
Dim s As Double
Dim e As Double
'//Beginnt zu zählen
s = Timer
Dein Code
'//Zeit die dein Code gebraucht hat
'//jetzt zeit - zeit bei start = endzeit
'//gerundet auf 2 nachkommastellen
e = Round(Timer - s, 2)
MsgBox e
End Sub 

Anzeige
AW: Wie lange dauert es mein Makro auszuführen
24.07.2017 15:12:38
Jenny
Hallo Max,
habe den Code gerade eben gepostet.
Gruß
Jenny
PS: ohne das Makro bräuchte ich ca. 100.000 Formeln in der Tabelle mit entsprechender Rechenzeit.
Das Makro berechnet die Formeln nur an den Stellen, wo sich die Ergebnisse ändern.
Mit anderen Worten ich spare einen Haufen Zeit.
Gruß
Jenny
Anzeige
AW: Wie lange dauert es mein Makro auszuführen
24.07.2017 15:12:19
Daniel
HI
am einfachsten ist, du schreibst ein kleines Makro, mit welchem du das eigentliche Makro startest und merkst dir dort die Startzeit.
Wenn das Makro durchgelaufen ist, bildest du die Differenz von Start- und Endzeit.
dazu musst du dann dein eigentliches Makro nicht verändern.
du kannst natürlich das ganze auch in dein Makro einbauen.
dann müssen die ersten beiden Zeilen an den Anfang und die Messagebox ans Ende.
dim StartZeit as Date
StartZeit = Now
Call DeinMakro
Msgbox "Laufzeit: " & Worksheetfunction.text(Now - StartZeit, "[mm]:ss")

Wenn du die Zeit nich im Minutenbereich messen willst, sondern im Sekundenbereich und darunter, dann:
dim StartZeit as double
StartZeit = Timer
Call DeinMakro
Msgbox "Laufzeit: " & Timer - StartZeit
Timer ergibt die Sekunden seit Mitternacht.
Gruß Daniel
Anzeige
AW: Wie lange dauert es mein Makro auszuführen
24.07.2017 15:36:09
Dieter(Drummer)
Hallo Jenny,
hier noch eine Variante mit Sprachausgabe:
Code von Herber: von Nepumuk am 21.06.2016 19:14:19, Mx: geändert, 22.06.2016
Option Explicit
Sub MakroLaufzeitOhneStd()
Dim dtmStart As Date, dtmEnd As Date
Dim intMinute As Integer, intSecond As Integer
dtmStart = Time
'Deine Code
dtmEnd = Time
intMinute = Minute(dtmEnd - dtmStart)
intSecond = Second(dtmEnd - dtmStart)
Application.Speech.Speak ("Laufzeit des Makros war") & _
IIf(intMinute  0, IIf(intMinute = 1, "eine Minute", CStr(intMinute) & "Minuten"), "")  _
& _
IIf(intSecond  0, IIf(intSecond = 1, "eine Sekunde", CStr(intSecond) & "Sekunden"), "" _
) & _
IIf(intSecond = 0, "unter einer Sekunde", ""), True
End Sub

Gruß, Dieter(Drummer)
Anzeige
AW: Wie lange dauert es mein Makro auszuführen
24.07.2017 15:54:16
Jenny
Hallo an euch alle,
ich bin leider noch etwas ratlos, an welche Stelle ich das in mein Makro einbauen soll. Da das eigentliche Makro ja durch ein Worksheet Change gestartet wird und es ja eigentlich nur den Case 5 betreffen soll.
Gruß
Jenny
AW: Wie lange dauert es mein Makro auszuführen
24.07.2017 16:04:02
Daniel
wie gesagt:
du musst dir die Startzeit zu beginn des Makros in eine Variable speichern.
am Ende des Makros bildest du dann die Differenz zwsichen aktueller und Startzeit und gibst dann diese aus.
Wenn die Zeit nur dann ausgeführt werden soll, wenn Spalte 5 geändert wurde, musst du eine weiter Variable vom Typ boolean anlegen.
Diese setzt du dann auf TRUE, wenn die Zeile 5 bearbeitet wurde (dies kannst du im Teil des Select Case machen, welches du schon hast.)
am ende fragst du dann diese Variable ab, und gibst die Msgbox nur aus, wenn diese Variable = True ist.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Laufzeitmessung für dein Excel Makro


Schritt-für-Schritt-Anleitung

Um die Laufzeit deines Excel Makros zu messen und in einer Message Box anzuzeigen, kannst du die folgenden Schritte ausführen:

  1. Starte dein Makro: Füge am Anfang deines Makros die folgende Zeile hinzu, um die Startzeit zu speichern:

    Dim StartZeit As Double
    StartZeit = Timer
  2. Füge deinen Code ein: Platziere hier den Code deines Makros, das du messen möchtest.

  3. Berechne die Laufzeit: Am Ende deines Makros kannst du die folgende Zeile hinzufügen, um die Laufzeit in Sekunden zu berechnen und in einer Message Box anzuzeigen:

    MsgBox "Laufzeit: " & Round(Timer - StartZeit, 2) & " Sekunden"
  4. Optional für Minuten und Sekunden: Wenn du die Ausgabe in Minuten und Sekunden haben möchtest, kannst du den folgenden Code verwenden:

    MsgBox "Laufzeit: " & WorksheetFunction.Text(Now - StartZeit, "[mm]:ss")
  5. Bedingung für die Ausgabe: Um sicherzustellen, dass die Message Box nur angezeigt wird, wenn mehr als 10.000 Zellen in Spalte E geändert wurden, kannst du eine Bedingung einfügen.


Häufige Fehler und Lösungen

  • Code wird nicht ausgeführt: Stelle sicher, dass du die Application.EnableEvents richtig einstellst, um sicherzustellen, dass dein Makro bei Änderungen in der Tabelle läuft.

  • Falsche Zeitangaben: Überprüfe, ob du den Timer oder Now korrekt verwendest. Timer gibt die Zeit in Sekunden zurück, während Now das aktuelle Datum und die Uhrzeit zurückgibt.

  • Message Box erscheint nicht: Wenn die Bedingung für die Anzahl der geänderten Zellen nicht erfüllt ist, wird die Message Box nicht angezeigt. Stelle sicher, dass die Zählvariable richtig gesetzt ist.


Alternative Methoden

  • Verwendung einer zusätzlichen Subroutine: Du kannst auch eine separate Subroutine erstellen, die dein Makro aufruft und die Zeit misst, ohne das ursprüngliche Makro zu verändern. Beispiel:

    Sub Laufzeit()
       Dim StartZeit As Double
       StartZeit = Timer
       Call DeinMakro
       MsgBox "Laufzeit: " & Round(Timer - StartZeit, 2) & " Sekunden"
    End Sub
  • Sprachausgabe: Wenn du eine Sprachausgabe möchtest, kannst du den Code von Dieter verwenden, der die Laufzeit des Makros auch mit einer Sprachausgabe anzeigt.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die Laufzeitmessung in dein Excel Makro integrieren kannst:

  1. Einfaches Makro:

    Sub BeispielMakro()
       Dim StartZeit As Double
       StartZeit = Timer
       ' Dein Code hier
       MsgBox "Laufzeit: " & Round(Timer - StartZeit, 2) & " Sekunden"
    End Sub
  2. Makro mit Sprachausgabe:

    Sub BeispielMitSprachausgabe()
       Dim dtmStart As Date, dtmEnd As Date
       dtmStart = Time
       ' Dein Code hier
       dtmEnd = Time
       Application.Speech.Speak ("Laufzeit des Makros war " & _
       Format(dtmEnd - dtmStart, "nn:ss"))
    End Sub

Tipps für Profis

  • Verwende Now für präzisere Zeitmessungen: Für genauere Zeitmessungen in Stunden, Minuten und Sekunden ist Now die bessere Wahl.

  • Optimierung des Makros: Wenn dein Makro lange dauert, überlege, ob du es optimieren kannst, um die Laufzeit zu verkürzen. Oft können Schleifen und Berechnungen optimiert werden.

  • Debugging: Nutze Debug.Print, um Zwischenergebnisse anzuzeigen, ohne die Ausführung zu unterbrechen. Das hilft, die Performance deines Makros zu analysieren.


FAQ: Häufige Fragen

1. Wie kann ich die Laufzeit nur für bestimmte Zellen messen? Du kannst eine Bedingung hinzufügen, die prüft, ob die geänderten Zellen in einer bestimmten Spalte liegen.

2. Was ist der Unterschied zwischen Timer und Now? Timer gibt die Zeit in Sekunden seit Mitternacht zurück, während Now das aktuelle Datum und die Uhrzeit zurückgibt. Verwende Now für genauere Zeitmessungen in Stunden und Minuten.

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