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

Zeitberechnung in Millisekunden

Forumthread: Zeitberechnung in Millisekunden

Zeitberechnung in Millisekunden
18.12.2012 12:37:18
Albert
Hallo zusammen,
aus einem früheren Forumseintrag hab ich diesen Code gezogen, der wunderschön Millisekunden anzeigt.
Mein Problem, dass ich nicht nur eine Taste als Zwischenzeitmessung verwenden möchte, sondern sieben.
Hier der alte Code...
Private Sub startWatch()
resetWatch
bStop = False
dblT = Timer
Me.Shapes("shpStop").Visible = True
Me.Shapes("shpLap").Visible = True
Me.Shapes("shpStart").Visible = False
On Error Resume Next
Do
DoEvents
Range("D6") = (Timer - dblT) / 86400
DoEvents
Loop While bStop = False
End Sub
Private Sub stopWatch()
bStop = True
Rows(10).Insert
Range("B10:D10").Font.ColorIndex = 23
Range("B11:D11").Font.ColorIndex = 15
Range("B10") = "Endtime:"
Range("D10") = Range("D6")
Me.Shapes("shpReset").Visible = True
Me.Shapes("shpStop").Visible = False
Me.Shapes("shpLap").Visible = False
End Sub
Private Sub lap()
lngR = lngR + 1
Rows(10).Insert
Range("B10:D10").Font.ColorIndex = 23
Range("B11:D11").Font.ColorIndex = 15
Range("B10") = "Lap " & Format(lngR, "000") & ":"
Range("D10") = Range("D6")
End Sub
Private Sub resetWatch()
lngR = 0
Range("D6") = 0
With Range("B10:D" & Rows.Count)
.ClearContents
.Font.ColorIndex = 15
End With
Me.Shapes("shpStart").Visible = True
Me.Shapes("shpStop").Visible = False
Me.Shapes("shpLap").Visible = False
Me.Shapes("shpReset").Visible = False
End Sub

Wie muss ich den Code umbauen?
Ich möchte z.B. die erste Taste so aufbauen.
a. Schreibe mir in die Spalte F eine "1"
b. Schreibe mir in die Spalte D die bereits verstrichene Zeit
c. Schreibe mir die Zeitdifferenz zwischen Start und der verstrichenen Zeit (bzw. letzten Tastendruck)
Bisher hab ich es leider nicht geschafft, den obigen Code so zu trennen, dass es funktioniert. Vorallem weil mir das lngR + 1 immer einen Strich durch die Rechnung gemacht hat. Es soll der neue Wert nicht oben eingetragen werden (die vorangegangenen Zeiten werden nach unten geschoben), sondern es soll nach unten erweitert werden.
Dank & LG
Albert

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeitberechnung in Millisekunden
18.12.2012 13:45:45
Albert
Servus Leute,
manchmal bringt es wirklich was, wenn man sich nen Kaffee holt und nochmal das Problem von etwas weiter weg anschaut...
Die Codeteilung hab ich soweit jetzt durch.
Vielleicht hilfts mal jemandem weiter:
Private bStop As Boolean
Private lngR As Long
Private Sub Start_Zeitaufnahme_Click()
Dim start As Double, x, dummy
If Start_Zeitaufnahme.Value = False Then _
With Start_Zeitaufnahme
.Caption = "Starten der Zeitaufnahme"
.BackColor = RGB(22, 149, 5)
End With
bStop = True 'Stoppuhr der Zeitaufnahme angehalten
i = Sheets("Zeitentabelle").Cells(Rows.Count, "D").End(xlUp).Row + 1
Cells(i, "D").Activate
Cells(i, "D").Value = Range("D6")
i = Sheets("Zeitentabelle").Cells(Rows.Count, "D").End(xlUp).Row
Cells(i, "A").Activate
Cells(i, "A").Value = "Ende der Zeitaufnahme"
i = Sheets("Zeitentabelle").Cells(Rows.Count, "D").End(xlUp).Row
Cells(i, "F").Activate
Cells(i, "F").Value = "0"
End If
If Start_Zeitaufnahme.Value = True Then _
With Start_Zeitaufnahme
.Caption = "Zeitaufnahme läuft"
.BackColor = RGB(255, 0, 0)
End With
Range("A15").Value = "Start der Zeitaufnahme"
Range("F15").Value = "0"
Range("D15").Value = Format(Timer, lngR, "000") & ":"
On Error Resume Next    'Stoppuhr der Zeitaufnahme starten
Do
DoEvents
Range("D6") = (Timer - dblT) / 86400
DoEvents
Loop While bStop = False
End If
End Sub
Private Sub Haupttätigkeit_Click()
Dim i As Long
If Start_Zeitaufnahme = False Then _
MsgBox ("Keine Funktion, da die Zeitaufnahme noch nicht gestartet wurde!") _
Else
i = Sheets("Zeitentabelle").Cells(Rows.Count, "D").End(xlUp).Row + 1
Cells(i, "D").Activate
Cells(i, "D").Value = Format(lngR, "000") & ":"
Cells(i, "D").Value = Range("D6")
i = Sheets("Zeitentabelle").Cells(Rows.Count, "F").End(xlUp).Row + 1
Cells(i, "F").Activate
Cells(i, "F").Value = "1"
i = Sheets("Zeitentabelle").Cells(Rows.Count, "F").End(xlUp).Row
Cells(i, "C").Activate
Cells(i, "C").Value = "Haupttätigkeit"
End Sub
ABER:
Ich hab jetzt noch versucht, dass ich den Zeitstempel beim Drücken der START-Taste wegschreiben lasse. Doch der bringt mir ein ganz komisches Format.
Weiß vielleicht jemand von euch da weiter?
LG
Albert

Anzeige
AW: Zeitberechnung in Millisekunden
18.12.2012 13:47:04
Albert
Oh, noch was!
Der Timer funktioniert nicht immer!!!!
D.h. wenn ich den Timer starte, läuft er normal. Wenn ich ihn erneut starte, funzelts nicht mehr...
an was könnte das liegen?
LG
Albert

Problem gelöst => owT
18.12.2012 15:25:18
Albert
...
;
Anzeige
Anzeige

Infobox / Tutorial

Zeitberechnung in Millisekunden mit Excel VBA


Schritt-für-Schritt-Anleitung

Um eine Stoppuhr in Excel VBA zu erstellen, die die Zeit in Millisekunden berechnet, kannst du den folgenden Code verwenden. Dieser Code ermöglicht es dir, mehrere Tasten zu verwenden, um verschiedene Zeiten zu messen.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu und kopiere den folgenden Code hinein:
Private bStop As Boolean
Private lngR As Long
Private dblT As Double

Private Sub Start_Zeitaufnahme_Click()
    Dim start As Double
    Dim i As Long

    If Start_Zeitaufnahme.Value = False Then
        With Start_Zeitaufnahme
            .Caption = "Starten der Zeitaufnahme"
            .BackColor = RGB(22, 149, 5)
        End With
        bStop = True 'Stoppuhr der Zeitaufnahme angehalten
        i = Sheets("Zeitentabelle").Cells(Rows.Count, "D").End(xlUp).Row + 1
        Cells(i, "D").Value = Range("D6")
        Cells(i, "A").Value = "Ende der Zeitaufnahme"
    End If

    If Start_Zeitaufnahme.Value = True Then
        With Start_Zeitaufnahme
            .Caption = "Zeitaufnahme läuft"
            .BackColor = RGB(255, 0, 0)
        End With
        Range("A15").Value = "Start der Zeitaufnahme"
        Do
            DoEvents
            Range("D6") = (Timer - dblT) / 86400
        Loop While bStop = False
    End If
End Sub
  1. Füge weitere Sub-Prozeduren für stopWatch, lap, und resetWatch hinzu, um die Funktionalität zu erweitern.

Häufige Fehler und Lösungen

Problem: Der Timer funktioniert nicht immer.
Lösung: Stelle sicher, dass der Timer nicht blockiert wird. Verwende DoEvents, um sicherzustellen, dass Excel weiterhin auf Eingaben reagiert.

Problem: Die Zeit wird häufig nicht korrekt in Millisekunden angezeigt.
Lösung: Überprüfe, ob du die richtige Formatierung verwendest. Nutze Format(Timer, "0.000"), um die Zeit in Millisekunden anzuzeigen.


Alternative Methoden

Falls du keine VBA-Lösungen verwenden möchtest, kannst du auch die Excel-Funktion NOW() nutzen, um die aktuelle Uhrzeit zu ermitteln. Diese Methode ist jedoch nicht so präzise wie die Verwendung von VBA, insbesondere bei der Berechnung von Millisekunden.

Für eine einfache Berechnung von 30 Minuten in Millisekunden kannst du folgende Formel in Excel verwenden:

=30*60*1000

Praktische Beispiele

Um die Zeit zwischen zwei Ereignissen zu messen, kannst du den folgenden Code verwenden:

Private Sub Haupttätigkeit_Click()
    Dim i As Long

    If Start_Zeitaufnahme = False Then
        MsgBox ("Keine Funktion, da die Zeitaufnahme noch nicht gestartet wurde!")
    Else
        i = Sheets("Zeitentabelle").Cells(Rows.Count, "D").End(xlUp).Row + 1
        Cells(i, "D").Value = Format(lngR, "000") & ":"
        Cells(i, "D").Value = Range("D6")
        Cells(i, "F").Value = "1"
        Cells(i, "C").Value = "Haupttätigkeit"
    End If
End Sub

Diese Prozedur speichert die Zeitdifferenz nach dem Drücken der Taste.


Tipps für Profis

  • Nutze die Format-Funktion, um die Zeit in Millisekunden anzuzeigen. Beispiel: Format(Timer, "0.000").
  • Du kannst den VBA Timer verwenden, um präzise Zeitmessungen in Millisekunden durchzuführen und die Funktion Application.Wait für Pausen in deinen Skripten.
  • Wenn du häufig mit Zeitberechnungen arbeitest, überlege, eine Benutzerform zu erstellen, um die Eingaben zu vereinfachen.

FAQ: Häufige Fragen

1. Wie viele Millisekunden hat ein Jahr?
Ein Jahr hat 31.536.000.000 Millisekunden (365 Tage).

2. Wie kann ich Excel VBA warten für Millisekunden?
Verwende Application.Wait oder Sleep aus der Windows API, um Verzögerungen in Millisekunden einzufügen.

3. Wie berechne ich 30 Minuten in Millisekunden?
Du kannst die Berechnung wie folgt durchführen: 30 * 60 * 1000, was 1.800.000 Millisekunden ergibt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige