在if函数中添加Workday

时间:2016-05-06 15:09:08

标签: excel vba excel-vba

如果时间是在下午5:10到晚上8:15之间,我有一个运行函数的if条件。

如何添加另一个条件,即只有在工作日且时间在下午5:10到晚上8:15之间才能运行该功能。

请参阅以下代码:

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

我希望避免在周末和银行假日期间运行代码。

非常感谢

3 个答案:

答案 0 :(得分:2)

将您的时间作为实际时间值处理,而不是使用TimeSerial function看起来像时间值的字符串。使用Weekday function确定周一至周五的数值。

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 :(得分:1)

在@ Zaider的链接中使用IsWeekend功能。就像@Forward Ed提到的那样,你需要一份银行假期清单。一旦你有了这些,你应该将它们存储在升序列表中的某个工作表上。然后做:

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

编辑:忘了VBA没有AndAlso

答案 2 :(得分:1)

我认为工作日功能适用于您的情况。您可以将日期存储在Excel中的范围中,也可以存储在代码中的数组中。我做了几个假期。

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