-12 Arbeitstag im Monat ermitteln

  • Access

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Lico.

    -12 Arbeitstag im Monat ermitteln

    Moin,
    ich brüte gerade über folgender Aufgabe: Ich muss den -12 Arbeitstag im Monat ermitteln, bisher kann ich den letzten Arbeitstag rausfinden. Für diesen Monat wäre das bspw. der 15.11.

    Hat jemand eine Idee?

    Visual Basic-Quellcode

    1. Sub letzten_Werktag_ermitteln()
    2. 'letzten Werktag im Monat ermitteln
    3. 'davon abgezogen werden immer 12 Arbeitstage, daraus ergibt sich das letzte Abgabedatum im Monat
    4. Dim d As Date
    5. Dim i As Long
    6. d = Now
    7. 'letzte Tag im Monat
    8. d = DateSerial(Year(d), Month(d) + 1, 0)
    9. For i = 1 To 3
    10. 'prüfen ob letzte Tag im Monat Sa/So
    11. If Weekday(d) = 1 Or Weekday(d) = 7 Then
    12. 'wenn ja, ein Tag davor
    13. d = DateSerial(Year(d), Month(d) + 1, 0) - i
    14. Else
    15. Exit For
    16. End If
    17. Next i
    18. MsgBox d & " " & Format(Weekday(d), "dddd"), , _
    19. "letzter Werktag in diesem Monat ist"
    20. End Sub


    Gruß
    Lico

    Lico schrieb:

    Ich muss den -12 Arbeitstag im Monat ermitteln,
    Dafür gibt es eine Excel-Funktion.
    WORKDAY() oder im deutschen Excel ARBEITSTAG()
    Du brauchst gar kein VBA.
    Wenn in Zelle A1 der nächste erste (01.12.2018) drin steht:
    =WORKDAY($A$1;-12)) oder =ARBEITSTAG($A$1,-12))

    Falls Du doch VBA haben willst:

    Visual Basic-Quellcode

    1. Dim Minus12thWorkdayOfThisMonth As Date
    2. Minus12thWorkdayOfThisMonth = WorksheetFunction.WorkDay(DateSerial(Year(Date), Month(Date) + 1, 1), -12)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Lico schrieb:

    Leider bin ich in Access und nicht in Excel.

    Sorry. Habe das Tag übersehen.
    Dann musst du's von Hand machen.
    access.mvps.org/access/datetime/date0012.htm
    Dort kannst du die Funktion ​dhAddWorkDaysA verwenden.

    Oder (von hinten durch die Brust ins Auge): Du kannst die Excel-Funktion auch in Access ansprechen, wenn du die Microsoft Excel 10.0 Object Library (oder analog) in die Access-Referenzen einträgst.

    Visual Basic-Quellcode

    1. Minus12thWorkdayOfThisMonth = Excel.WorksheetFunction.WorkDay(DateSerial(Year(Date), Month(Date) + 1, 1), -12)
    Diese Variante ist bequem, aber nicht sehr elegant.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Ich werde das Problem anders angehen: Die Stichtage zur Abgabe der Meldung sind in einem Jahreskalender hinterlegt. Ich werde diese einfach ein einer neuen Tabelle im Backend hinterlegen und von dort abrufen. Ende des Jahres wird dann halt immer per Manus gepflegt. ;)