|
yanwei82123300 发表于 2012-6-26 16:49
五一 1天 十一 3天 元旦 1天,注意休息!!谢谢 - '---------------------------------------------------------------------------------------
- ' Procedure : DeliveryDay
- ' DateTime : 2012-6-25 23:25
- ' Author : Henry D. Sy
- ' 参数 : OrderDate 下单日期
- '
- ' : intPeriod 交货周期(以天为单位)
- '
- '根据下单日期及交货周期计算剔除非工作日(周六,日)以及五一,国庆,元旦之交货日期
- '按理:交货日期=下单日期+周期+非工作日天数,但加上这段额外的天数中也许又有周六日
- '本例的重点就是利用递归函数来计算这非工作日中的非工作日.....
- '---------------------------------------------------------------------------------------
- '
- Public Function DeliveryDay(OrderDate As Date, intPeriod As Integer) As Date
- Dim i As Integer '循环变量
- Dim NWD As Integer '保存非工作日天数(Non_Work_Days)
- Dim myDate As Date '生产期间每天的日期,用来判断是否为NWD
- Dim gDate As Date '计算过程中的临时日期值
- On Error GoTo DeliveryDay_Error
- For i = 1 To intPeriod '这里i取值从1开始,不考虑0,因为接单当日无需判断是否工作日
- myDate = DateAdd("d", i, OrderDate)
- If Weekday(myDate) = 1 Or Weekday(myDate) = 7 Then
- NWD = NWD + 1
- End If
- '下面考虑五一,国庆,元旦
- If Right(Format(myDate, "yyyymmdd"), 4) = "0501" Or _
- Right(Format(myDate, "yyyymmdd"), 4) = "0101" Then
- NWD = NWD + 1
- ElseIf Right(Format(myDate, "yyyymmdd"), 4) = "1001" Then
- NWD = NWD + 3
- End If
- Next
- '判断及计算工作日结束
- gDate = DateAdd("d", intPeriod, OrderDate) '在不考虑工作日时:交货日期=下单日期+周期
- '下面开始考虑工作日
- If NWD = 0 Then '没有非工作日
- DeliveryDay = gDate '交货日期=下单日期+周期
- '有非工作日
- Else
- DeliveryDay = DeliveryDay(gDate, NWD) '为了计算加上非工作日天数后的非工作日,这里函数引用自己本身(递归),继续循环计算至NWD=0
- End If
- On Error GoTo 0
- Exit Function
- DeliveryDay_Error:
- MsgBox "Error " & Err.Number & " (" & Err.Description & ") "
- End Function
复制代码 |
|