Hallo!
Wenn Du den 15.3.2013 (Freitag) als Startdatum eingibst,
und den 21.3. (Donnerstag) als Zieldatum willst,
wären das insgesamt 5 Werk-Tage.
Wie definierst Du eine Projektdauer von 3-4 bzw. 6-8 Tagen?
Im Beispiel wird ein Startdatum angegeben und eine
Projektdauer (in Tagen), wobei der erste und letzte
Arbeitstag einbezogen ist. Feiertage kannst Du über
die oben angegebene Klasse abfragen und in eine
List(of Date) eintragen. Diese Werte sind beim
Zählen der Arbeitstage zusätzlich zu beachten.
Public Class frmWerkTage2
'Labels
Dim lblStart As New Label With _
{.Parent = Me, .Width = 200, .Text = "Projekteingang: "}
Dim WithEvents dtpStart As New DateTimePicker With _
{.Parent = Me, .Top = 40, _
.Width = 200, .Value = CDate(Now)}
Dim lblDauer As New Label With _
{.Parent = Me, .Width = 100, .Left = 250, .Top = 40, _
.Text = "Projekt-Dauer: "}
Dim WithEvents txtDauer As New TextBox With _
{.Parent = Me, .Width = 100, .Left = 350, .Top = 40, _
.Text = "3"}
'Berechnungsbutton
Dim WithEvents btnCompute As New Button With _
{.Parent = Me, .Top = 100, _
.Width = 200, .Text = "Berechne Datum Projektende"}
'Anzeige des Ergebnisses
Dim lblWerktage As New Label With _
{.Parent = Me, .Top = 100, .Left = 250, _
.Width = 200, .Text = "", .BackColor = Color.LightGray}
Private Sub btnCompute_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnCompute.Click
Dim dt As Date = DateValue(dtpStart.Value.ToString)
Dim dauer As Integer
If Not Integer.TryParse(txtDauer.Text, dauer) OrElse dauer < 1 Then
MsgBox("Fehlerhafte Angabe zur Projektdauer (mind. 1 Tag)")
End If
Dim c As Integer
Do
Dim wochentag As Integer = Microsoft.VisualBasic.Weekday(dt)
'Unter Annahme: 1 = Sonntag, 7 = Samstag
If wochentag > 1 And wochentag < 7 Then
c += 1
End If
dt = dt.AddDays(1)
Loop While c < dauer
'Annahme: Datum letzter Projekttag = Datum Projektende
lblWerktage.Text = "Projektende: " & CStr(dt.AddDays(-1))
End Sub
Private Sub dtp_ValueChanged(ByVal sender As Object, ByVal e As _
System.EventArgs) _
Handles dtpStart.ValueChanged, txtDauer.TextChanged
lblWerktage.Text = ""
End Sub
Private Sub frmWerkTage2_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Width = 600
End Sub
End Class |