Anzahl Urlaubstage berechnen
Sonntag 29. März 2009 von Andreas Vogt
Angenommen sie arbeiten in einer Personalabteilung. Bei Ihnen landen fast täglich Urlaubsanträge mit den Angaben Urlaubsbeginn, Urlaubsende, AnzahlTage. Soweit ja easy, aber leider sind über 10% der Anträge ohne die Angabe der Anzahl Urlaubstage. Sie holen den großen Kalender raus, zählen die Werktage, dann den zweiten Kalender mit den Feiertagen raus holen und prüfen ob ein Feiertag dazwischen liegt usw.
Die Lösung: Der Urlaubstage-Rechner.
Man sehe sich erst mal nachfolgenden VBA-Code an, der in einem Modul steht:
Public Function urlaubstage(Startdatum As Date, Enddatum As Date) As Long
Dim i As Integer
Dim tempDate As Date
If Not IsDate(Startdatum) Or Not IsDate(Enddatum) Then
MsgBox "Bitte gültiges Startdatum und Enddatum eingeben", vbExclamation + vbOKOnly
Exit Function
End If
If DateDiff("d", Startdatum, Enddatum) < 0 Then
MsgBox "Das Enddatum muss nach dem Startdatum liegen!", vbExclamation + vbOKOnly
Exit Function
End If
For i = 0 To DateDiff("d", Startdatum, Enddatum)
tempDate = DateAdd("d", i, Startdatum)
If Weekday(tempDate) <> 1 And Weekday(tempDate) <> 7 Then
'tempDate ist kein Wochenende
If Not istFeiertag(tempDate) Then
'tempDate ist kein Feiertag
urlaubstage = urlaubstage + 1
End If
End If
Next i
End Function
Zuerst wird Startdatum und Enddatum auf Plausibilität geprüft, dann wird in einer For Next Schleife vom Startdatum aus gehend pro Schleifendurchgang 1 Tag hinzugezählt (erster Schleifendurchgang = 0 Tage hinzuzählen) und geprüft ob dieser Tag weder Wochenende noch Feiertag ist. Wenn diese Bedingungen erfüllt sind wird die Variable urlaubstage um 1 hochgezählt.
Die Berechnung der Feiertage habe ich hier weggelassen, weil es auf www.dbwiki.de ein sehr gutes Beispiel dazu gibt.
Private Function istFeiertag(tDatum As Date) As Boolean
'Zur Berechnung der Feiertage empfehle ich das Beispiel auf www.dbwiki.de
'http://www.dbwiki.de/upload/AccSampleFeiertage.zip
End Function
Zum ersten Testen verwende ich folgende Prozedur:
Sub urlaubstage_Test()
Dim Startdatum As Date, Enddatum As Date
Startdatum = CDate("15.6.2009")
Enddatum = CDate("2.7.2009")
MsgBox "zwischen dem " & Startdatum & " und dem " & Enddatum & " liegen " & urlaubstage(Startdatum, Enddatum) & " Urlaubstage"
End Sub
Ich überlasse es Ihnen das ganze schön in ein Formular einzukleiden wo man dann z.B. mittels DatePicker (siehe Artikel über Datepicker) das Startdatum und Enddatum auswählt.
AV 2009
Dieser Beitrag wurde erstellt am Sonntag 29. März 2009 um 20:12:08 und abgelegt unter VBA Code. Kommentare zu diesen Eintrag im RSS 2.0 Feed. Sie können einen Kommentar schreiben, oder einen Trackback auf Ihrer Seite einrichten.
PDF Version