HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv

Beiträge zum Thread: VBA - ungewollte Zeitrechnung

Christian
18.05.2026 12:45:17
VBA - ungewollte Zeitrechnung
Daniel
18.05.2026 12:59:24
AW: VBA - ungewollte Zeitrechnung
Christian
18.05.2026 13:23:22
AW: VBA - ungewollte Zeitrechnung
RPP63
18.05.2026 13:15:24
AW: VBA - ungewollte Zeitrechnung
RPP63
18.05.2026 13:16:41
hatte nicht aktualisiert owT
Christian
18.05.2026 13:26:38
AW: VBA - ungewollte Zeitrechnung
Daniel
18.05.2026 14:01:09
AW: VBA - ungewollte Zeitrechnung
Christian
18.05.2026 14:25:52
AW: VBA - ungewollte Zeitrechnung
Christian
18.05.2026 14:45:49
zu Ralfs Aktualisierung
Daniel
18.05.2026 14:49:12
AW: VBA - ungewollte Zeitrechnung
Christian
18.05.2026 15:08:20
AW: VBA - ungewollte Zeitrechnung
Case
18.05.2026 15:13:15
Also, wenn du den...
Christian
18.05.2026 17:14:16
nachgefragt
Case
18.05.2026 17:51:55
Nun - wie es in der...
Christian
18.05.2026 18:07:11
AW: Nun - wie es in der...
snb
18.05.2026 16:09:13
AW: VBA - ungewollte Zeitrechnung
Christian
18.05.2026 17:23:33
AW: VBA - ungewollte Zeitrechnung
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
18.05.2026 12:45:17
VBA - ungewollte Zeitrechnung
Hallo, ich bitte um eure Hilfe. es geht mir um folgendes eigentlich unspektakuläres Makro mit Zeitmessung. Wenn ich das Makro vor Mitternacht starte und es nach Mitternacht endet, wird eine völlig unrealistische Zeitangabe ins Blatt Hilfe geschrieben. Kann ein geschultes Auge bitte mal schauen, woran das liegen könnte und mein Problem beheben? Wenn das Makro am selben tag startet und endet, ist die Zeitangabe realistisch.

Danke
Christian

Sub MakroAuswahlStarten()


Dim auswahl As Long
Dim startZeit As Double
Dim endZeit As Double
Dim DauerInSekunden As Double
Dim DauerAlsZeit As Date
Dim MsgResult As VbMsgBoxResult

auswahl = InputBox("Welches Makro möchtest du ausführen?" & vbCrLf & _
"1: erstesMakro" & vbCrLf & _
"2: zweitesMakro" & vbCrLf & _
"3: drittesMakro" & vbCrLf & _
"4: viertesMakro" & vbCrLf & _
"5: fünftesMakro" & vbCrLf & _
"6: sechstesMakro" & vbCrLf & _
"7: siebtesMakro" & vbCrLf & _
"8: achtesMakro" & vbCrLf & vbCrLf & _
"Gib die entsprechende Zahl ein:", "Makro-Auswahl", "1")

If auswahl = 0 Then Exit Sub
If auswahl < 1 Or auswahl > 8 Then
MsgBox "Ungültige Auswahl. Bitte gib eine Zahl zwischen 1 und 8 ein.", vbCritical, "Fehler bei der Auswahl"
Exit Sub
End If

MsgResult = MsgBox("Möchtest du die Ausführungszeit messen?", vbYesNo + vbQuestion, "Zeitmessung")

If MsgResult = vbYes Then startZeit = Timer

Select Case auswahl
Case 1
Call ErstesMakro
Case 2
Call zweitesMakro
Case 3
Call drittesMakro
Case 4
Call viertesMakro
Case 5
Call fünftesMakro
Case 6
Call sechstesMakro
Case 7
Call siebtesMakro
Case 8
Call achtesMakro
Case Else
Exit Sub
End Select

On Error GoTo 0

If MsgResult = vbYes Then
endZeit = Timer
DauerInSekunden = endZeit - startZeit
DauerAlsZeit = DauerInSekunden / 86400
Worksheets("Hilfe").Range("D17").Value = Format(DauerAlsZeit, "hh:mm:ss")
End If

Exit Sub

FehlerHandler:
MsgBox "Fehler beim Ausführen des Makros. Bitte stelle sicher, dass das ausgewählte Makro existiert.", vbCritical, "Fehler"

End Sub


Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Daniel
18.05.2026 12:59:24
AW: VBA - ungewollte Zeitrechnung
Hi

TIMER zählt die Sekunden ab Mitternacht.

Wenn du über Mitternacht damit die Zeit misst, musst du das berücksichtigen.

Wenn das Makro nicht länger als 24h läuft, dann kannst du so korrigieren und diese Zeile vor der Berechnung der Dauer einfügen;

If Startzeit > Endzeit then Endzeit  = Endzeit + 86400


Wenn es länger laufen kann, würde ich Start- und Endzeit als Date deklarieren und mit NOW befüllen (NOW ist Datum + Uhrzeit)

Gruß Daniel
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
18.05.2026 13:23:22
AW: VBA - ungewollte Zeitrechnung
Hallo Daniel,

vielen Dank für die schnelle Hilfe und die verständliche Erklärung.

Du hattest genau den richtigen Hinweis – mir war nicht bewusst, dass `Timer` nur die Sekunden seit Mitternacht zählt und danach wieder bei 0 beginnt.

Ich habe deine vorgeschlagene Abfrage jetzt eingebaut.

Der Hinweis mit `Now` war ebenfalls hilfreich. In meinem Fall laufen die Makros allerdings maximal etwa 3 Stunden, daher reicht deine erste Lösung vollkommen aus.

Vielen Dank nochmals!

Gruß
Christian
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
RPP63
18.05.2026 13:15:24
AW: VBA - ungewollte Zeitrechnung
Moin Christian!
Aus der VBA-Hilfe zur Timer-Funktion:
https://learn.microsoft.com/de-de/office/vba/language/reference/user-interface-help/timer-function?

»Gibt einen Single-Wert zurück, der die Anzahl der Sekunden angibt, die seit Mitternacht vergangen sind

Heißt:
5 vor 24 ist 86100 (Start)
5 nach 0 ist 300 (Ende)
Du benötigst nicht 300 - 86100,
sondern 300 + 86400 - 86100

In Excel würde ich REST() nehmen.
Der Modulo-Operator in VBA funktioniert aber anders …

Deshalb mal kurz aus dem Ärmel:
Ich prüfe per Vergleich, ob Ende < Start
True entspricht in VBA -1
Statt + 86400
allgemein dann
Ende - (Ende<Start)*86400 - Start

Gruß Ralf
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
RPP63
18.05.2026 13:16:41
hatte nicht aktualisiert owT
(kein Text)
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
18.05.2026 13:26:38
AW: VBA - ungewollte Zeitrechnung
Moin Ralf,

danke dir ebenfalls für die schnelle Erklärung und das anschauliche Beispiel.

Damit wurde sofort klar, warum die Berechnung nach Mitternacht schiefgeht. Die Werte 86100 und 300 machen das Problem wirklich gut sichtbar.

Auch deinen Hinweis zu `REST()` bzw. zum unterschiedlichen Verhalten des Modulo-Operators in VBA fand ich interessant.

Ich habe inzwischen die einfache Abfrage von Daniel eingebaut:

Da meine Makros maximal etwa 3 Stunden laufen, reicht diese Lösung für meinen Fall völlig aus.

Deinen Ansatz mit

Ende - (Ende < Start) * 86400 - Start


finde ich aber auch interessant – wieder was gelernt

Vielen Dank euch beiden!

Gruß
Christian
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Daniel
18.05.2026 14:01:09
AW: VBA - ungewollte Zeitrechnung
Bei 3 Stunden Laufzeit sind die 1/10-Sekunden doch nebensächlich.
Nimm einfach NOW für Start und Ende, damit kannst du einfach die Differenz bilden, egal wir lang das Makro benötigt.
Timer nehme ich bri kurzen Laufzeiten, wo es unwahrscheinlich ist, dass sie über Mitternacht laufen.

Nur mal so neben bei, was macht das Makro denn?
Ggf ist die Laufzeit durch ungeschickte Programmierung bedingt und lässt sich optimieren.

Gruß Daniel
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
18.05.2026 14:25:52
AW: VBA - ungewollte Zeitrechnung
Hallo Daniel,

danke für deine Nachfrage. Wie du siehst es sind 8 Makros, die zur Auswahl gestartet werden, nur 2 davon brauchen länger als 2 Minuten.
Das es so lange dauert liegt daran, dass Daten von Servern abgerufen werden und ich mich bewusst gegen parallele Verarbeitung entschieden habe, mit paralleler Verarbeitung der Anfragen landeten die Inhalte kreuz und quer in der Tabelle aber nicht in der Reihenfolge wie ich sie in meiner Tabelle vorgebe. Daher habe ich mich bewusst dazu entschieden alles schön und brav nacheinander abzufragen.

Das Ganze ist eigentlich ein riesengroßes Makro, ich habe es nur in 8 Teile unterteilt, um an gewissen Punkten eingreifen zu können, ohne mir vorher die Mühe machen zu müssen, Haltepunkte zu setzen. Wenn z.b. Teil 2 eine Liste erstellt von Inhalten, die in einer CSV Datei fehlen, die ich in für Teil 3 brauche, braucht es halt die Möglichkeit, da einzugreifen und die CSV zu vervollständigen, solche Sachen halt.

Aber zurück zu deinem Angebot, meine Makros zu optimieren.
Wir reden von einer Datei, 42 MB reiner Text, 34 Blätter (davon 15 nur temporär durch Makro1 erstellt, 19 permanent), insgesamt 20 Makros und 4 PQ Abfragen für die CSV Dateien). Selbst wenn du das echt für mich optimieren würdest, was ich niemals erwarten würde, wäre der Ertrag minimal, weil alles was länger als 2 Minuten dauert liegt an Downloads von Servern via Internet. Und diese mache ich ja wie du merkst dann nachts.

Aber wenn du mir bei etwas helfen möchtest. Kann ich dem besagten Makro sagen, dass es bei Case 1 danach speichern, Excel Schließen und Laptop runterfahren soll? Obwohl, da frag ich mich grad wenn Excel geschlossen ist, wird kein Makro mehr ausgeführt, ok, ich korrigiere nicht runterfahren sondern ein PS Script starten, das runterfährt.

Gruß
Christian
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
18.05.2026 14:45:49
zu Ralfs Aktualisierung
wäre doch mal eine Idee zur Anregung bei Hans, dass jemand der gerade als Helfer auf einen Beitrag antwortet, den Status der Anfrage auf In Bearbeitung durch... setzen kann. Weil selbst wenn Ralf aktualisiert hätte, hatte er ja zu dem Zeitpunkt schon seine Antwort geschrieben. Was meint Ihr?
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Daniel
18.05.2026 14:49:12
AW: VBA - ungewollte Zeitrechnung
Wenn es Abfragen sind, die solange dauern, dann kann man da nichts machen.

Häufig ist es aber der Abgleich zweier Listen oder das Löschen von Zeilen mit Bedingung, welches man geschickt oder ungeschickte mit erheblicher Zeitdifferenz programmieren kann.
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
18.05.2026 15:08:20
AW: VBA - ungewollte Zeitrechnung
zumindest so Dinge wie Arrays um alles in einem Rutsch zu schreiben oder Dictionaries zum Vergleich nutze ich bereits. Das es nicht in überall in Millisekunden geht, liegt vermutlich eher z.b. an den großen Datenmengen, oder ich habe auch absichtlich in jedem der 8 Teile drin, dass es ein weiteres Makro starten soll, welches die jeweils geänderten Blätter nach gewissen Kriterien Zeile für Zeile mit einer von 3 Schriftfarben versehen soll, damit ich später gewisse Zuordnungen bereits an der Schriftfarbe erkenne. Das sind alles Sachen, die dauern ihre Zeit, aber auf jeden Fall Danke für dein Angebot.

Naja wenn du noch eine Idee hast mit dem beenden und herunterfahren, damit das Laptop nicht die ganze Nacht anbleibt, da wäre ich dir wirklich dankbar.

Gruß
Christian
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Case
18.05.2026 15:13:15
Also, wenn du den...
Moin Christian, :-)

... PC/Laptop am Ende runterfahren willst, dann z. B. mit "shutdown": ;-)
https://learn.microsoft.com/de-de/windows-server/administration/windows-commands/shutdown

Excel musst du nicht beenden (aber die Datei natürlich speichern), das erledigt der Parameter /f für dich. ;-)
Dim varShell As Variant

varShell = Shell("shutdown /s /f /t 5", vbHide)

Die Parameter: /s - Herunterfahren, /f - Programme beenden, /t - warte 5 Sekunden. ;-)

Also nach dem speichern ausführen. ;-)

Servus
Case
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
18.05.2026 17:14:16
nachgefragt
Hallo Case,

vielen Dank

aber doch nochmal nachgefragt, wenn ich das jetzt wie unten stehend einbaue... ist das dann richtig so? wundert mich ein wenig dass dann in meiner Version das Makro nie zu dem Punkt End Sub kommt... wenn ich herunterfahren auswähle

Danke auf jeden Fall für deine Hilfe
Christian

Select Case auswahl


Case 1

' Abfrage VOR dem Makro
AntwortHerunterfahren = MsgBox( _
"Nach Ausführung speichern und herunterfahren?", _
vbYesNo + vbQuestion, _
"Speichern & Herunterfahren")

If AntwortHerunterfahren = vbYes Then
HerunterfahrenNachMakro = True
End If

Call ErstesMakro

If HerunterfahrenNachMakro = True Then
ThisWorkbook.Save
varShell = shell("shutdown /s /f /t 5", vbHide)
End If

Case 2
Call zweitesMakro

Case 3
Call drittesMakro


die Deklaration von varShell hab ich schon ganz am Anfang zu den anderen Variablen gepackt
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Case
18.05.2026 17:51:55
Nun - wie es in der...
Moin Christian, :-)

... Beschreibung steht, die Anwendungen werden sofort geschlossen und der PC - nach der Wartezeit - heruntergefahren. ;-)

End Sub wird dann nicht mehr erreicht - ist aber, wenn gespeichert ist, IMHO egal. ;-)

Servus
Case
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
18.05.2026 18:07:11
AW: Nun - wie es in der...
ist aber, wenn gespeichert ist, IMHO egal. ;-) das wollte ich hören, danke.
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
snb
18.05.2026 16:09:13
AW: VBA - ungewollte Zeitrechnung
welches die jeweils geänderten Blätter nach gewissen Kriterien Zeile für Zeile mit einer von 3 Schriftfarben versehen soll, damit ich später gewisse Zuordnungen bereits an der Schriftfarbe erkenne

Wäre conditional formatting dann nicht viel schneller ?
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
18.05.2026 17:23:33
AW: VBA - ungewollte Zeitrechnung
Hallo snb,

das schließe ich mal nicht aus, im Gegenteil das könnte sogar wirklich der Fall sein.
Aber 90% des Inhalts der Makros besteht darin, Dinge in einem Abwasch zu erledigen, für die es sonst viele Klicks, Copy + Paste usw. benötigt hätte. Mein Primäres Ziel war es einfach, ich drücke aufn Button Makro startet, ich lehne mich zurück bis alles fertig ist. Ich müsste jetzt ein funktionierendes System aufbrechen und mir die Mühe machen für 9 gefärbte Blätter mit 3 verschiedenen Farben Bedingungen aufzustallen und Regeln dafür zu erstellen, mit dem Ergebnis dass 8 Makros die sowieso zusammen 3 1/2 Stunden brauchen, vielleicht insgesamt 3 Minuten schneller laufen. Da sehe ich irgendwo keinen nennenswerten Vorteil der mir das bringt.

TRotzdem danke für den Einwand
Christian