Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Arbeitszeit

Bloody Beginner (Anonym) / 14 Antworten / Flachansicht Nickles

Hallo, ich versuche gerade mir ein Arbeitszeitberechnungsprogramm zusammenzuzimmern.Dabei hab ich folgendes Problem: Wie schaffe ich es, daß VB mir "negative" Stunden berechnet? Z.B. Kommen um 7:00, Gehen um 13:00 wäre -1:00 bei Sieben Stunden Sollarbeitszeit.

Für Hilfestellungen wäre ich überaus dankbar, ich weiss keinen Rat.

bei Antwort benachrichtigen
T-Rex Bloody Beginner (Anonym) „Thanks nochmal, jetzt hats funktioniert!!Hast Du noch nen Tip das ganze auch mit...“
Optionen

Moin,

im Date-Format ist das so'n Problem mit negativen Zeiten.

Deshalb mal folgenden Code:

Private Function LeadingZero(lngZahl As Long) As String
  Dim Result As String
  If (Abs(lngZahl) > 10) Then
    Result = Abs(lngZahl) ' Zahl ist zweistellig
  Else
    Result = "0" & Abs(lngZahl) ' Zahl ist einstellig
  End If
  If (lngZahl     Result = "-" & Result ' Zahl ist negativ
  End If
  LeadingZero = Result
End Function

Private Function Arbeitszeit(ByVal datKommen As Date, ByVal datGehen As Date) As String
  Dim lngKommen As Long ' Sekunden von Mitternacht bis zum Kommen
  Dim lngGehen As Long ' Sekunden von Mitternacht bis zum Gehen
  Dim lngSollZeit As Long ' Sekunden, die gearbeitet werden müssen
  Dim lngPausen As Long ' Sekunden, die die Länge der Pausen entsprechen
  Dim lngGearbeitet As Long ' Sekunden vom Kommen bis Gehen mit Pausen
  Dim lngMitternach As Long ' Sekunden um 24Uhr
  Dim strResult As String ' Gearbeitete Zeit

  ' Die Zeiten in Sekunden umrechnen
  lngKommen = Second(datKommen) + Minute(datKommen) * 60 + Hour(datKommen) * 3600
  lngGehen = Second(datGehen) + Minute(datGehen) * 60 + Hour(datGehen) * 3600

  ' Sollzeit beträt sieben Stunden, also 07:00,00
  lngSollZeit = 7 * 3600 ' Achtung!! bei mehr als neun Stunden muß hier von Hand
  ' ausgerechnet werden! (Scheiß MicroSoft und VB)
  ' Pausenzeit beträgt 45 Minuten also 00:45,00
  lngPausen = 45 * 60
  ' Mitternach berechnen
  lngMitternach = 86400

  ' Die Brutto-Zeit berechnen
  If (lngKommen > lngGehen) Then
    ' Über Mitternacht hinaus
    lngGearbeitet = ((lngMitternach - lngKommen) + lngGehen)
  Else
    ' Am selben Tag
    lngGearbeitet = (lngGehen - lngKommen)
  End If

  ' Pausen und SollZeit abziehen
  lngGearbeitet = lngGearbeitet - (lngSollZeit + lngPausen)

  ' Zeit in einen String umwandeln
  strResult = LeadingZero(lngGearbeitet \ 3600) & ":" & LeadingZero(Abs(lngGearbeitet Mod 3600) \ 60) & ":" & LeadingZero(Abs((lngGearbeitet Mod 3600) Mod 60))

  ' Zeit zurückgeben
  Arbeitszeit = strResult
End Function

Hoffe, Dir damit geholfen zu haben.

 GrüßeT-Rex 
bei Antwort benachrichtigen