Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Arbeitstage incl. Feiertage+Urlaub
zurück: Wenn-Funktion in VBA weiter: Probleme beim Umstieg Access 2003 --> Access 2007 Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
sonixxl
Greenhorn


Verfasst am:
15. Jan 2009, 17:26
Rufname:

Arbeitstage incl. Feiertage+Urlaub - Arbeitstage incl. Feiertage+Urlaub

Nach oben
       Version: Office 2003

Hallo zusammen,

hier mal wieder was zum ewigen Thema Arbeitstage Confused

Ich habe die spitzen Lösung von TK-Soft zur Arbeitstagberechnung übernommen. Nun möchte ich berechnen der Arbeitstage zwischen zwei Zeitpunkten noch zu den Feiertagen einige andere Tage berücksichtigen.
Die interessante Stelle im Modul ist wohl folgende:

Nun will ich nicht jedes Jahr das Modul ändern, bzw. hier nicht alle Urlaubstage aufführen. Wie bekomme ich das mit einer Tabelle hin, in der die Urlaubstage liegen. Diese heißt tbl_Urlaubstage und ist in folgendem Format in der BD:
tbl_Urlaubstage
Code:
Function Feiertag(Datum As Variant, fHK As Boolean, fMH As Boolean, _
                   fRT As Boolean, fAL As Boolean, fHA As Boolean, _
                   fSV As Boolean, fFL As Boolean, fRM As Boolean, _
                   fFD As Boolean, fAM As Boolean, fBB As Boolean) As String
    Dim jahr As Integer, Monat As Integer, Tag As Integer, s As Long
    Dim T As Integer, i As Integer
   
'************ Feiertagsberechnung *****************
    jahr = Year(Datum)
    Monat = Month(Datum)
    Tag = Day(Datum)
    s = DateSerial(jahr, Monat, Tag)
'************ feste Feiertage *****************
    If (Monat = 1) And (Tag = 1) Then
        Feiertag = "Neujahr"
        GoTo Ende
    End If
    If (jahr = 2009) And (Monat = 1) And (Tag = 2) Then '*********************
        Feiertag = "URLAUB"                       'Beispiel Urlaubstag von mir
        GoTo Ende                                       '*********************
    End If
    If fHK = True Then
        If (Monat = 1) And (Tag = 6) Then
            Feiertag = "Heilige drei Könige"
            GoTo Ende
        End If
    End If
    'usw..
Diese Datensätze sollen quasi im Modul in einer Schleife durchgespielt werden (Anstatt If (jahr = 2009) And (Monat = 1) And (Tag = 2) )

Würde mich freuen, wenn mir da jemand helfen kann. Hatte schon einen Ansatz mit LookUp, aber keine Ahnung, wie man das genau anstellt.

Grüße

Sonixxl
Nachtrag: sonixxl am 21. Jan 2009 um 09:16 hat folgendes geschrieben:
*schieb hoch* Rolling Eyes

Bin noch nicht weiter mit dem Problem.
Falls jemand noch eine Idee hat, würde ich mich über Feedback freuen.

Grüße

Sonixxl
lleopard
IT Datenbankentwickler


Verfasst am:
21. Jan 2009, 11:18
Rufname: leo

AW: Arbeitstage incl. Feiertage+Urlaub - AW: Arbeitstage incl. Feiertage+Urlaub

Nach oben
       Version: Office 2003

moin moin

hier mal meine Lösung unabhängig von TK-Soft Laughing

Meine Tabelle heißt JEFeiertage und sieht so aus
Code:
ID   Wochentag   Feiertagsdatum   Feiertagsbezeichnung
1   Di.   01.01.2008   Neujahr
2   Fr.   21.03.2008   Karfreitag
3   Mo.   24.03.2008   Ostermontag
4   Do.   01.05.2008   Maifeiertag
...
Jaja, alte nicht mehr relevante Daten. Aber es geht ja ums Prinzip... Daten pflegen könnt ihr selbst! Twisted Evil

So!

Zusätzlich habe ich eine Tabelle für die zu berechnenden Zeiträume (kann man ja über ein Formular eingeben oder statt aus der Tabelle dann auch aus dem Formular direkt lesen. Auch das ist letztlich nur Daten-Krams)

Die sieht also so aus:
Code:
JETVK   JETVKBeginn   JETVKEnde
TVK 05/08   30.04.2008   27.05.2008
TVK 06/08   28.05.2008   24.06.2008
TVK 07/08   25.06.2008   22.07.2008
TVK 08/08   23.07.2008   19.08.2008
TVK 09/08   20.08.2008   16.09.2008
TVK 10/08   17.09.2008   14.10.2008
Jetzt aber zur Routine! (Das Vorgeplänkel dient nur zum Verständnis der Routine an sich...Logo!)
Code:
Function TVKTageBerechnung(ByVal TVKListe As String) As Long
    Dim TVK As String
    Dim TVKStart, TVKEnde, TVKDauer
    Dim DaTStg As String, i As Integer
    Dim AnzFeiertag As Long, Feiertag
    Dim Arbeitstage As Long, Wochentag
   
    On Error Resume Next
    TVK = DLookup("JETVK", "JETVK", "JETVK = '" & TVKListe & "'")
    'Wenn der TVK nicht aufgelistet ist in der Tabelle dann raus
    If IsNull(TVK) Or TVK = vbNullString Or TVK = "" Then
        TVKTageBerechnung = 0
        Exit Function
    End If
    DaTStg = Format(Date, "\#mm\/dd\/yyyy\#")
    'Hier prüfe ich ab, nach welchem Eintrag gesucht wird...
    TVK = DLookup("JETVK", "JETVK", "JETVKBeginn <= " & DaTStg & " " & _
                                "AND JETVKEnde >= " & DaTStg)
    'Und bekomme dafür hier den Anfang
    TVKStart = DLookup("JETVKBeginn", "JETVK", _
                       "JETVKBeginn <= " & DaTStg & " " & _
                   "AND JETVKEnde >= " & DaTStg)
    'Und hier das Ende...
    TVKEnde = DLookup("JETVKEnde", "JETVK", _
                      "JETVKBeginn <= " & DaTStg & " " & _
                  "AND JETVKEnde >= " & DaTStg)
    'Wieviele Tage hat der TVK?
    TVKDauer = TVKEnde - TVKStart
    Dim SQLStart, SQLEnde
    SQLStart = Format(TVKStart, "\#mm\/dd\/yyyy\#")
    SQLEnde = Format(TVKEnde, "\#mm\/dd\/yyyy\#")
    'Wieviele davon sind BIS HEUTE Feiertage und
    'fallen nicht auf einen Samstag bzw Sonntag?
    AnzFeiertag = DCount("*", "JEFeiertage", _
                         "Feiertagsdatum Between " & SQLStart & " " & _
                                            "And " & DaTStg & " " & _
                     "AND Wochentag <> 'Sa.' " & _
                     "AND Wochentag <> 'So.'")
    For i = 0 To TVKDauer
        Wochentag = Weekday(TVKStart + i)
        If Not Wochentag = 1 _
        And Not Wochentag = 7 Then
            Arbeitstage = Arbeitstage + 1
            If TVKStart + i = Date Then
                'Und HIER kann man also zB den Wert für die Anzahl der
                'Arbeitstage schon übergeben:
                Forms![DeinFormular]!DeinAusgabeFeld = Arbeitstage - 1 - _
                                                       AnzFeiertag
            End If
        End If
    Next i
    'Wieviele davon sind Feiertage und
    'fallen nicht auf einen Samstag bzw Sonntag?
    AnzFeiertag = DCount("*", "JEFeiertage", _
                         "Feiertagsdatum Between " & SQLStart & " " & _
                                            "And " & SQLEnde & " " & _
                     "AND Wochentag <> 'Sa.' " & _
                     "AND Wochentag <> 'So.'")
    'Übergabe des TageWerts an die Funktion:
    TVKTageBerechnung = Arbeitstage - AnzFeiertag
End Function
Wie man sieht werden aus den Feiertagen auch die rausgerechnet, die auf einen Sa. oder einen So. fallen. Und diese lösung funktioniert bei mir! Also wer Verbesserungen hat, kann sie gerne mitteilen... Mehr effizienz ist immer gut!

Gruß Leo

_________________
Gruß Leo

Honnit soit qui mal y pense!
sonixxl
Greenhorn


Verfasst am:
21. Jan 2009, 16:52
Rufname:


AW: Arbeitstage incl. Feiertage+Urlaub - AW: Arbeitstage incl. Feiertage+Urlaub

Nach oben
       Version: Office 2003

hi lleopard,

sehr schöne Lösung.
Ich werde nun mal versuchen, die beiden Ansätze zu verknüpfen, damit die Feiertage weiterhin mit der Oster-logik von TK berechnet werden und über deinen Ansatz eine Tabelle mit den Betriebsferien einbezogen wird.
Ich melde mich dann hier wieder, wenn ich was gebastelt habe.

Super, endlich geht´s wieder voran.

Grüße

Sonixxl
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Tage zwischen Start- und Enddatum ohne Sonn und Feiertage? 2 TobiasKarge 197 14. Mai 2013, 15:02
TobiasKarge Tage zwischen Start- und Enddatum ohne Sonn und Feiertage?
Keine neuen Beiträge Access Programmierung / VBA: heute minus eins (we und Feiertage ausschließen) 3 kakarott 184 15. März 2013, 15:53
Gast heute minus eins (we und Feiertage ausschließen)
Keine neuen Beiträge Access Hilfe: Programm/Arbeitstage 10 Belmont 491 17. Feb 2013, 15:25
Gast Programm/Arbeitstage
Keine neuen Beiträge Access Hilfe: Ermittlung Arbeitstage 15 Alex_D 2248 07. Feb 2012, 16:56
Alex_D Ermittlung Arbeitstage
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage: Anzahl incl. Nullwert; Beschrieftung ? 3 Pred123 374 27. Sep 2011, 12:30
kyron9000 Abfrage: Anzahl incl. Nullwert; Beschrieftung ?
Keine neuen Beiträge Access Formulare: Formular soll Urlaub Freigeben wenn möglich 0 AlejandroFefeNeu 604 11. Mai 2011, 16:43
AlejandroFefeNeu Formular soll Urlaub Freigeben wenn möglich
Keine neuen Beiträge Access Formulare: Datum plus WE plus Feiertage 2 Christian010 487 13. Apr 2011, 00:19
Christian010 Datum plus WE plus Feiertage
Keine neuen Beiträge Access Hilfe: Kalendertage und Arbeitstage 25 Ben. J. 3522 19. Nov 2010, 11:22
Ben. J. Kalendertage und Arbeitstage
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage Feiertage löschen 1 Gast 693 04. Nov 2010, 15:33
kyron9000 Abfrage Feiertage löschen
Keine neuen Beiträge Access Programmierung / VBA: Funktion ARBEITSTAG(DATUM;ARBEITSTAGE;tblFEIERTAGE) 7 lbijl 1705 03. Nov 2010, 19:19
Gast Funktion ARBEITSTAG(DATUM;ARBEITSTAGE;tblFEIERTAGE)
Keine neuen Beiträge Access Tabellen & Abfragen: Datumsbereich nur Arbeitstage bzw. Werktage abfragen 17 Gast 1783 31. Aug 2010, 23:27
Gast Datumsbereich nur Arbeitstage bzw. Werktage abfragen
Keine neuen Beiträge Access Berichte: Textfeld Wert per VBA zu weisen incl. IF Bedingung 6 JeremiasP 1919 17. Aug 2010, 16:55
JeremiasP Textfeld Wert per VBA zu weisen incl. IF Bedingung
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Excel-Formeln