ich wünsche zunächst ein frohes und gesundes neues Jahr 2020.
Doch auch in diesem Jahr, habe ich wieder Fragen und Probleme und so kommen zu meiner ersten Problematik im neuen Jahr.
Ich arbeite gerade an einer Projekt-Liste mit Priorisierung. Eine Komponente in der Prio-Berechnung ist die geplante Dauer des Projekts.
Soll heissen: In meiner Tabelle, in der Spalte H steht immer das Datum an dem mit dem Projekt begonnen wurde.
In Spalte R trage ich ein weiteres Datum ein, das geplante Ende des Projekts.
Nun möchte ich die Arbeitstage zwischen diesen beiden Daten berechnen lassen und falls Feiertage dazwischen liegen, sollen diese abgezogen werden.
Ich habe hier im Forum schon folgende Function entdeckt:
Function Arbeitstage(AnfDatum As Date, EndDatum As Date, FreieTage As Excel.Range) As Long
Dim Datum As Date
Dim Tage As Long
Dim Istfrei As Boolean
Dim FreiTag As Range
If AnfDatum For Datum = AnfDatum To EndDatum
Istfrei = False
If Weekday(Datum, vbMonday) For Each FreiTag In FreieTage
If Datum = FreiTag.Value Then
Istfrei = True
Exit For
End If
Next FreiTag
If Not Istfrei Then
Tage = Tage + 1
End If
End If
Next Datum
Else
Tage = ""
End If
Arbeitstage = Tage
End Function Allerdings habe ich keine Ahnung wie ich diese richtig nutze. Wenn ich es richtig verstehe ist es ein Nachbau der Nettoarbeitstage (WorkSheet-)Funktion, richtig? Also berechnet sie Arbeitstage, abzüglich Feiertage (Oben in der Funktion "FreieTage" und "FreiTag"), oder nicht?
Wenn es so ist, wie ich es meine, soll die Funktion ausgeführt werden, wenn ich das End-Datum in Spalte R eingetragen habe. Dies wollte ich so lösen:
Im Code zu Tabelle1 steht folgendes:
Private Sub Worksheet_Change(ByVal Target As Range)
xRow = Target.Row
xCol = Target.Column
If xCol = 18 Then
If Intersect(Target, Range("R5:R35")) Is Nothing Then
Exit Sub
Else
Call WorkDay_Calc
End If
End If
End Sub
Im Modul1 steht folgender Code:Sub WorkDay_Calc()
dend = Tabelle1.Cells(xRow, xCol).Value
dstart = Tabelle1.Cells(xRow, 8).Value
FTage = Tabelle9.Range("B2:B11")
WorkDay = Arbeitstage(dstart, dend, FTage)
Tabelle1.Cells(xRow, 19).Value = WorkDay
End Sub
Function Arbeitstage(AnfDatum As Date, EndDatum As Date, FreieTage As Excel.Range) As Long
Dim Datum As Date
Dim Tage As Long
Dim Istfrei As Boolean
Dim FreiTag As Range
If AnfDatum For Datum = AnfDatum To EndDatum
Istfrei = False
If Weekday(Datum, vbMonday) For Each FreiTag In FreieTage
If Datum = FreiTag.Value Then
Istfrei = True
Exit For
End If
Next FreiTag
If Not Istfrei Then
Tage = Tage + 1
End If
End If
Next Datum
Else
Tage = ""
End If
Arbeitstage = Tage
End Function Nun habe ich das Problem das beim Kompilieren folgender Fehler auftaucht: "Argumenttyp ByRef unverträglich" und zwar bei der Variable dstart.
Ich habe die Variablen aber unter Option Explicit im Modul als Date deklariert.
Schon mal vielen Dank!
LG
Marcel