如果时间是在下午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
我希望避免在周末和银行假日期间运行代码。
非常感谢
答案 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