设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12345
返回列表 发新帖
楼主: yanwei82123300
打印 上一主题 下一主题

[模块/函数] 如何计算某一时段内有几个周六日?

[复制链接]
41#
 楼主| 发表于 2012-6-26 16:51:35 | 只看该作者
清明节1天,端午1天,八月十五 1天 春节3天
42#
发表于 2012-6-26 16:52:00 | 只看该作者
yanwei82123300 发表于 2012-6-26 16:49
五一 1天 十一 3天 元旦 1天,注意休息!!谢谢
  1. '---------------------------------------------------------------------------------------
  2. ' Procedure : DeliveryDay
  3. ' DateTime  : 2012-6-25 23:25
  4. ' Author    : Henry D. Sy
  5. ' 参数      : OrderDate 下单日期
  6. '
  7. '           : intPeriod 交货周期(以天为单位)
  8. '
  9. '根据下单日期及交货周期计算剔除非工作日(周六,日)以及五一,国庆,元旦之交货日期
  10. '按理:交货日期=下单日期+周期+非工作日天数,但加上这段额外的天数中也许又有周六日
  11. '本例的重点就是利用递归函数来计算这非工作日中的非工作日.....
  12. '---------------------------------------------------------------------------------------
  13. '
  14. Public Function DeliveryDay(OrderDate As Date, intPeriod As Integer) As Date

  15.     Dim i As Integer          '循环变量

  16.     Dim NWD As Integer        '保存非工作日天数(Non_Work_Days)

  17.     Dim myDate As Date        '生产期间每天的日期,用来判断是否为NWD

  18.     Dim gDate As Date         '计算过程中的临时日期值

  19.     On Error GoTo DeliveryDay_Error

  20.     For i = 1 To intPeriod    '这里i取值从1开始,不考虑0,因为接单当日无需判断是否工作日

  21.         myDate = DateAdd("d", i, OrderDate)
  22.         If Weekday(myDate) = 1 Or Weekday(myDate) = 7 Then
  23.             NWD = NWD + 1
  24.         End If
  25.         '下面考虑五一,国庆,元旦
  26.         If Right(Format(myDate, "yyyymmdd"), 4) = "0501" Or _
  27.            Right(Format(myDate, "yyyymmdd"), 4) = "0101" Then
  28.             NWD = NWD + 1
  29.         ElseIf Right(Format(myDate, "yyyymmdd"), 4) = "1001" Then
  30.             NWD = NWD + 3
  31.         End If
  32.     Next
  33.     '判断及计算工作日结束

  34.     gDate = DateAdd("d", intPeriod, OrderDate)  '在不考虑工作日时:交货日期=下单日期+周期
  35.     '下面开始考虑工作日
  36.     If NWD = 0 Then   '没有非工作日

  37.         DeliveryDay = gDate           '交货日期=下单日期+周期

  38.         '有非工作日
  39.     Else
  40.         DeliveryDay = DeliveryDay(gDate, NWD)    '为了计算加上非工作日天数后的非工作日,这里函数引用自己本身(递归),继续循环计算至NWD=0
  41.     End If

  42.     On Error GoTo 0
  43.     Exit Function

  44. DeliveryDay_Error:

  45.     MsgBox "Error " & Err.Number & " (" & Err.Description & ") "
  46. End Function
复制代码
43#
发表于 2012-6-26 16:54:32 | 只看该作者
结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
44#
 楼主| 发表于 2012-6-26 16:55:23 | 只看该作者
{:soso_e100:}{:soso_e181:}非常感谢!!大公无私!!
45#
发表于 2012-6-26 23:19:39 | 只看该作者
33.        If Right(Format(myDate, "yyyymmdd"), 4) = "0501" Or _

34.           Right(Format(myDate, "yyyymmdd"), 4) = "0101" Then

35.            NWD = NWD + 1

36.        ElseIf Right(Format(myDate, "yyyymmdd"), 4) = "1001" Then

37.            NWD = NWD + 3

38.        End If

==================================
改为这样,可能好理解些:
dim Str1 as string
str1 = Format(myDate, "mmdd")
select case str1
case "0501", "0101"
   NWD = NWD + 1
case  "1001"
   NWD = NWD + 3
end select
46#
发表于 2012-6-27 10:11:54 | 只看该作者
layaman_999 发表于 2012-6-26 23:19
33.        If Right(Format(myDate, "yyyymmdd"), 4) = "0501" Or _

34.           Right(Format(myDat ...

谢谢,layaman_999 提醒!!
47#
发表于 2012-6-27 10:21:22 | 只看该作者
yanwei82123300 发表于 2012-6-26 16:51
清明节1天,端午1天,八月十五 1天 春节3天

增加农历节日
http://www.office-cn.net/forum.p ... mp;extra=#pid660056
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-21 05:43 , Processed in 0.667764 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表