Anzahl Urlaubstage berechnen

By , 29. März 2009

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

Leave a Reply

You must be logged in to post a comment.

OfficeFolders theme by Themocracy