Microsoft Excel

Herbers Excel/VBA-Archiv

Funktion in VBA für netto Arbeitszeit

Betrifft: Funktion in VBA für netto Arbeitszeit von: Proximus
Geschrieben am: 25.08.2004 10:40:11

Hallo,

ich bin gerade dabei so was wie NETTOARBEITSTAGE() in VBA zu schrieben und hab da leider ein Problem.
Ich möchte diese Variablen übergeben können:

Function Nettotage(endDatum As Date, dauer As Integer, feiertag() As Date, samstag As String, sonntag As String)
End Funktion

endDatum: das Enddatum des Zeitraumes
dauer: die Dauer des Zeitraumes (17.-20. = 4 Tage)
feiertage(); dachte ich mir eigentlich das ich da so was wie A12:F15 angeben kann
samstag: optionale Angabe ob am Samstag gearbeitet wird oder nicht
sonntag: optionale Angabe ob am Sonntag gearbeitet wird oder nicht

Die Probleme sind also wie kann ich das Feld von Feiertagen übergeben und das das Anfangs- und Enddatum ebenfals kein freier Tag sein darf (sprich die Verschiebung des Anfangsdatums so lange nach vorn bis es keiner ist und mit dem Enddatum so weit nach hinten)
Ausserdem wie kann ich die einzelnen Zellen des Feldes ansprechen.

Kann mir jemand helfen oder hat schon jemand so was geschrieben und kann es mir geben?

Danke und Gruß Proximus

  


Betrifft: AW: Funktion in VBA für netto Arbeitszeit von: Sigi
Geschrieben am: 25.08.2004 16:33:25

Hallo Proximus,

es ist unklar was du erreichen willst. Im Betreff schreibst du "Nettoarbeitszeit" im Text
geht es aber wohl um Arbeitstage? Wie ist das mit dem Vorwärts- bzw. Rückwärtsrechnen des
EndDatums zu verstehen? Was ist, wenn am Sonntag gearbeitet werden soll, dieser aber ein
Feiertag ist? Wird dann gearbeitet?

Kannst du mal ein Beispiel angeben, was du genau erreichen willst?

Gruß
Sigi


  


Betrifft: AW: Funktion in VBA für netto Arbeitszeit von: max
Geschrieben am: 25.08.2004 16:41:43

'Hallo, hab grade einen Kalender geschrieben, hier einige Fragmente:
'Ob Datum Feiertag ist oder nicht lässt sich über "If Len(Feiertag("25.12.05")>0" prüfen

Private Function Feiertag(Datum As Date) 
Dim OstTag As Date
OstTag = Ostern(Year(Datum))
Select Case Datum
 Case DateSerial(Year(Datum), 1, 1)
  Feiertag = "Neujahr"
 Case OstTag - 2
  Feiertag = "Karfreitag"
 Case OstTag
  Feiertag = "Ostersonntag"
 Case OstTag + 1
  Feiertag = "Ostermontag"
 Case DateSerial(Year(Datum), 5, 1)
  Feiertag = "Tag der Arbeit"
 Case OstTag + 39
  Feiertag = "Himmelfahrt"
 Case OstTag + 49
  Feiertag = "Pfingstsonntag"
 Case OstTag + 50
  Feiertag = "Pfingstmontag"
 Case DateSerial(Year(Datum), 10, 3)
  Feiertag = "Nationalfeiertag"
 Case DateSerial(Year(Datum), 12, 25)
  Feiertag = "1. Weihnachtstag"
 Case DateSerial(Year(Datum), 12, 26)
  Feiertag = "2. Weihnachtstag"
 Case Else
  Feiertag = ""
End Select
End Function

Private Function Ostern(Jhr%) As Date
Dim d As Integer
d = (((255 - 11 * (Jhr Mod 19)) - 21) Mod 30) + 21
Ostern = DateSerial(Jhr, 3, 1) + d + (d > 48) + _
6 - ((Jhr + Jhr \ 4 + d + (d > 48) + 1) Mod 7)
End Function


'Ausserdem hab' ich 'ne Formel verwendet um Ferien mit Wochenende anzuzeigen:
'=WENN(ODER(WOCHENTAG(A8;2)=1;WOCHENTAG(A8;2)=7)=WAHR;A8-WOCHENTAG(A8);A8) 'Anfang
'=WENN(ODER(WOCHENTAG(B8;2)=5;WOCHENTAG(B8;2)=6)=WAHR;B8+7-WOCHENTAG(B8;2);B8) 'Ende
'Zum Prüfen in Zellen daneben: =TEXT(D8;"TTT")
'Weiterhin viel Spass
'max


 

Beiträge aus den Excel-Beispielen zum Thema "Funktion in VBA für netto Arbeitszeit"