Mit VBScript einfache Arbeitszeit berechnen. Mit Mittagspause
Hallo zusammen,
ich weiß das ich mit CDate Funktionen und TimeValue das Ziel irgendwie erreich kann ... leider erreiche ich es aber nicht.
Ich habe folgendes Szenario welches ich, leider, aktuell nicht gelöst bekomme:
Ich möchte per Input Fenstern (klappt auch) meine Arbeitszeit berechnen.
--> szArbeitsBeginn = Beginn der Arbeit
--> szPauseAnfang = Beginn der Mittagspause
--> szPauseEnde = Ende der Mittagspause
Berechnet werden soll:
--> szPausenDauer = Pausenlänge
--> szHbisJetzt = wieviel Stunden ich bereits gearbeitet habe
--> szSollerreicht = um wieviel Uhr ich mein Arbeitssoll von 8h erreicht habe
in meinem bisherigen Skript schaffe ich es auch in etwa die Werte zu erreichen allerdings funktioniert meine Umrechnung von , auf Uhrzeit nicht und ich bekomm die Formel für die "Um wieveil Uhr sind meine 8h erreicht" nicht hin.
So - jetzt paste ich mein bisheriges Skript mal hier rein und hoffe das mir einer helfen kann.
Dim szSollH, szArbeitsBeginn, szPauseAnfang, szPauseEnde, szPausenDauer, szHbisJetzt, szSollerreicht
Dim szFinalMessage
szSollH = "8:00:00"
szArbeitsBeginn = InputBox("Eingestempelt um ", "Arbeitszeit", "08:00")
if szArbeitsBeginn = "" then
else
szPauseAnfang = TimeValue(InputBox("Pause Anfang", "Arbeitszeit", "11:15"))
szPauseEnde = TimeValue(InputBox("Pause Ende", "Arbeitszeit", "13:00"))
' Rechne
' Pausenlänge
szPausenDauer = DateDiff("n", szPauseAnfang, szPauseEnde) / 60
szFinalMessage = "Mittagspause: " & vbTab & szPausenDauer & "h" & vbcrlf
' Bis jetzt gearbeitet
szHbisJetzt = DateDiff("n", TimeValue(szArbeitsBeginn), TimeValue(Now())) / 60
szFinalMessage = szFinalMessage & "Arbeitszeit bisher: " & vbTab & szHbisJetzt & "h" & vbcrlf
' Wann ist Soll erreicht
'szSollerreicht = TimeValue(szSollH) + TimeValue(szArbeitsBeginn) + szPausenDauer
szSollerreicht = TimeValue(szSollH) + TimeValue(szArbeitsBeginn) + szPausenDauer
szFinalMessage = szFinalMessage & "Soll erreicht um: " & vbTab & TimeValue(szSollerreicht) & "Uhr" & vbcrlf
' Ausgabe
wscript.echo szFinalMessage
end if
Das ganze sieht in meinem Editor etwas schöner aus:
ich weiß das ich mit CDate Funktionen und TimeValue das Ziel irgendwie erreich kann ... leider erreiche ich es aber nicht.
Ich habe folgendes Szenario welches ich, leider, aktuell nicht gelöst bekomme:
Ich möchte per Input Fenstern (klappt auch) meine Arbeitszeit berechnen.
--> szArbeitsBeginn = Beginn der Arbeit
--> szPauseAnfang = Beginn der Mittagspause
--> szPauseEnde = Ende der Mittagspause
Berechnet werden soll:
--> szPausenDauer = Pausenlänge
--> szHbisJetzt = wieviel Stunden ich bereits gearbeitet habe
--> szSollerreicht = um wieviel Uhr ich mein Arbeitssoll von 8h erreicht habe
in meinem bisherigen Skript schaffe ich es auch in etwa die Werte zu erreichen allerdings funktioniert meine Umrechnung von , auf Uhrzeit nicht und ich bekomm die Formel für die "Um wieveil Uhr sind meine 8h erreicht" nicht hin.
So - jetzt paste ich mein bisheriges Skript mal hier rein und hoffe das mir einer helfen kann.
Dim szSollH, szArbeitsBeginn, szPauseAnfang, szPauseEnde, szPausenDauer, szHbisJetzt, szSollerreicht
Dim szFinalMessage
szSollH = "8:00:00"
szArbeitsBeginn = InputBox("Eingestempelt um ", "Arbeitszeit", "08:00")
if szArbeitsBeginn = "" then
else
szPauseAnfang = TimeValue(InputBox("Pause Anfang", "Arbeitszeit", "11:15"))
szPauseEnde = TimeValue(InputBox("Pause Ende", "Arbeitszeit", "13:00"))
' Rechne
' Pausenlänge
szPausenDauer = DateDiff("n", szPauseAnfang, szPauseEnde) / 60
szFinalMessage = "Mittagspause: " & vbTab & szPausenDauer & "h" & vbcrlf
' Bis jetzt gearbeitet
szHbisJetzt = DateDiff("n", TimeValue(szArbeitsBeginn), TimeValue(Now())) / 60
szFinalMessage = szFinalMessage & "Arbeitszeit bisher: " & vbTab & szHbisJetzt & "h" & vbcrlf
' Wann ist Soll erreicht
'szSollerreicht = TimeValue(szSollH) + TimeValue(szArbeitsBeginn) + szPausenDauer
szSollerreicht = TimeValue(szSollH) + TimeValue(szArbeitsBeginn) + szPausenDauer
szFinalMessage = szFinalMessage & "Soll erreicht um: " & vbTab & TimeValue(szSollerreicht) & "Uhr" & vbcrlf
' Ausgabe
wscript.echo szFinalMessage
end if
Das ganze sieht in meinem Editor etwas schöner aus:
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 204489
Url: https://administrator.de/forum/mit-vbscript-einfache-arbeitszeit-berechnen-mit-mittagspause-204489.html
Ausgedruckt am: 22.04.2025 um 12:04 Uhr
13 Kommentare
Neuester Kommentar
Hallo JO-1983 und willkommen im Forum!
Versuch es als Anhaltpunkt einmal mit folgenden Zeilen 13 und 14:
- da Du in den Variablen ja bereits Zeitwerte hast, ist es nicht sinnvoll, auf Minuten (Stunden) zu konvertieren.
Grüße
bastla
P.S.: So schön wie in Deinem Editor wird Code hier zwar nicht dargestellt, aber mit Verwendung von <code>- / </code>-Tags sieht er zumindest etwas besser aus (und ist aufgrund der Zeilennummern auch leichter zu referenzieren) ...
Versuch es als Anhaltpunkt einmal mit folgenden Zeilen 13 und 14:
szPausenDauer = szPauseEnde - szPauseAnfang
szFinalMessage = "Mittagspause: " & vbTab & FormatDateTime(szPausenDauer, 4) & " h" & vbcrlf
Grüße
bastla
P.S.: So schön wie in Deinem Editor wird Code hier zwar nicht dargestellt, aber mit Verwendung von <code>- / </code>-Tags sieht er zumindest etwas besser aus (und ist aufgrund der Zeilennummern auch leichter zu referenzieren) ...

Hallo JO-1983!
Der Vollständigkeit halber
Um den Variablen den Datentyp Zeit zuzuweisen, verwendest Du entweder die Funktion 'TimeValue' oder 'CDate' Intern haben Datums- und Zeitangaben den Datentyp Double, wobei das Datum >= 1 und Zeit < 1 (1 sekunde = 1/86400). D.h., dass Du mit den Werten ganz normal rechnen kannst, wenn der Zeit-Text in das entsprechende Zahlenformat umgewandelt wird.
Mit DateDiff berechnest Du ja nur Intervalle in Stunden (h), Minuten (n) oder Sekunden (s)
Gruß Dieter
Der Vollständigkeit halber
Um den Variablen den Datentyp Zeit zuzuweisen, verwendest Du entweder die Funktion 'TimeValue' oder 'CDate' Intern haben Datums- und Zeitangaben den Datentyp Double, wobei das Datum >= 1 und Zeit < 1 (1 sekunde = 1/86400). D.h., dass Du mit den Werten ganz normal rechnen kannst, wenn der Zeit-Text in das entsprechende Zahlenformat umgewandelt wird.
Mit DateDiff berechnest Du ja nur Intervalle in Stunden (h), Minuten (n) oder Sekunden (s)
dArbeitszeit = TimeValue("8:00")
dArbeitsBegin = TimeValue("8:00") '
dPausenBegin = TimeValue("11:15")
dPausenEnde = TimeValue("13:00")
dArbeitsEnde = CDate(dArbeitsBegin + dArbeitszeit + dPausenEnde - dPausenBegin)
MsgBox dArbeitsEnde
Gruß Dieter

Hallo bastla!
Sorry, stehe gerade auf der Leitung?
Gruß Dieter
[edit] ist mir doch noch was dazu eingefallen (korrigiert...?)
[/edit]
Sorry, stehe gerade auf der Leitung?
Gruß Dieter
[edit] ist mir doch noch was dazu eingefallen (korrigiert...?)
Hallo JO-1983!

Grüße
bastla
die Lösung ist, wie von euch schon als Tipp gegeben, hier in Minuten zu rechnen.
Der Tipp war zwar nicht, in Minuten zu rechnen, sondern einfach direkt die Zeitwerte zu addieren / subtrahieren, aber wenn's auch so passt ... wie mache ich aus einer 2,75 eine Ausgabe mit 02:45h
Schau Dir (nochmals) die Zeile 2 meines Ansatzes ganz oben an ...Grüße
bastla
Hallo JO-1983!
Ein Tipp: Wenn Du den gleichen Programmteil dreimal verwendest, bietet es sich eigentlich schon an, ein "
21 - 25 durch
und 27 - 31 durch
ersetzen und am Ende des Scripts
hinzufügen.
Was jedenfalls noch fehlt ist als erste Zeile
- so machen nämlich die Variablendeklarationen auch Sinn, da Du dann nicht nur bemerkst, dass zB "
Grüße
bastla
Ein Tipp: Wenn Du den gleichen Programmteil dreimal verwendest, bietet es sich eigentlich schon an, ein "
Sub
" oder, wie hier, eine "Function
" daraus zu machen - Du könntest daher die Zeilen 12 - 16 durchdArbeitsBeginn = GetTime(dArbeitsBeginn)
dPauseAnfang = GetTime(dPauseAnfang)
dPauseEnde = GetTime(dPauseEnde)
Function GetTime(dZeit) ' prüfen ob : mit angegeben wurde
If InStr(dZeit, ":") = 0 Then dZeit = Left(dZeit, Len(dZeit) - 2) & ":" & Right(dZeit, 2)
GetTime = TimeValue(dZeit)
End Function
Was jedenfalls noch fehlt ist als erste Zeile
Option Explicit
dSollHFr
" nicht deklariert wurde, sondern auch auf Schreibfehler in Variablennamen aufmerksam wirst (weil die falsch geschriebene Variable als "undefined" erkannt wird) ...Grüße
bastla