2016-05-06 2 views
2

Ich habe eine if-Bedingung, die eine Funktion ausführt, wenn die Zeit zwischen 5:10 Uhr und 20:15 Uhr ist.Arbeitstag hinzufügen in Funktion

Wie kann ich eine weitere Bedingung hinzufügen, die besagt, dass die Funktion nur ausgeführt wird, wenn es sich um einen Arbeitstag handelt und die Zeit zwischen 17:10 und 20:15 Uhr liegt.

Bitte siehe Code unten:

If Format(Time, "hhmm") > 1710 And Format(Time, "hhmm") < 2015 Then 
     Do stuff 
    Else 
     Stop 
    End If 

würde Ich mag den Code am Wochenende und Feiertagen vermeiden läuft.

Vielen Dank

+0

diese Frage Siehe: [Überprüfen Sie, ob Weekend] (http://stackoverflow.com/questions/1580432/how-to-determine-if-a-date-falls-on-the-weekend) – Zaider

+0

Sie muss eine Liste von Feiertagen erstellen. –

+0

bitte markieren Sie eine korrekte Antwort für diese Frage –

Antwort

1

Verwenden Sie die IsWeekend Funktion in @ Zaider den Link. Wie @Forward Ed erwähnt, benötigen Sie eine Liste von Feiertagen. Sobald Sie diese haben, sollten Sie sie auf einem Blatt in einer aufsteigenden Liste speichern. Dann tun:

Dim holiday As Boolean 
For holRow = 1 To N 
    If Month(Date) = Month(Cells(holRow,1).Value) And _ 
        Day(Date) = Day(Cells(holRow,1).Value) Then 
     holiday = True 
    End If 
Next 
If Not holiday And Not IsWeekend(Date) And _ 
    Format(Time, "hhmm") > 1710 And Format(Time, "hhmm") < 2015 Then 
    Do Stuff 
Else 
    Stop 
End If 

EDIT: Passwort ist VBA nicht hat AndAlso

2

Tackle Ihre Zeiten als aktuellen Zeitwert, nicht Strings, die mit den TimeSerial function wie ein Zeitwert aussehen. Verwenden Sie die Weekday function, um die numerischen Werte von Mo-Fr zu ermitteln.

If Time >= TimeSerial(17, 10, 0) And Time <= TimeSerial(20, 15, 0) And Weekday(Date, 2) <6 Then 
    Do stuff 
Else 
    Stop 
End If 
+1

Bitte beachten Sie, dass ich [Weekday Funktion] (https://msdn.microsoft.com/en-us/library/82yfs2zh.aspx) mit der optionalen ** FirstDayOfWeek ** als ** FirstDayOfWeek.Montag **. Dies bedeutet, dass Montag ** 1 ** und Samstag ist ** 6 ** daher "Und Wochentag (Datum, 2) <6". – Jeeped

1

Ich denke, die Arbeitstag-Funktion würde für Ihre Situation funktionieren. Sie können die Daten entweder in einem Bereich in Excel oder in einem Array im Code speichern. Ich habe ein paar Ferien gemacht.

Sub isTimeToDoThings() 

    Dim time As Date 
    Dim tomorrow As Date 
    Dim nextWorkDay As Date 
    Dim holidays(3) As Date 
    Set wf = Application.WorksheetFunction 

    holidays(0) = CDate("1/1 /" & Year(Now())) 'New Years 
    holidays(1) = CDate(ThanksgivingDate(Year(Now()))) 'Thanksgiving 

    time = Date 
    tomorrw = Date + 1 
    nextWorkDay = CDate(wf.WorkDay(time, 1)) 

    If Format(time, "hhmm") > 1710 And Format(time, "hhmm") < 2015 _ 
    And tomorrow = nextWorkDay Then 
     'Do stuff 
    Else 
     Stop 
    End If 


End Sub 

Public Function ThanksgivingDate(Yr As Integer) As Date 
    ThanksgivingDate = DateSerial(Yr, 11, 29 - _ 
     Weekday(DateSerial(Yr, 11, 1), vbFriday)) 
End Function 
Verwandte Themen