设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
11#
发表于 2012-6-25 17:05:00 | 只看该作者
本帖最后由 Henry D. Sy 于 2012-6-25 17:25 编辑
  1. Public Function gDeliveryDay(sDate As Date, intPeriod As Integer) As Date
  2.     Dim i As Integer, NWD As Integer
  3.     Dim myDate As Date
  4.     For i = 0 To intPeriod
  5.         myDate = DateAdd("d", i, sDate)
  6.         If Weekday(myDate) = 1 Or Weekday(myDate) = 7 Then
  7.             NWD = NWD + 1
  8.         End If
  9.     Next
  10.     gDeliveryDay = DateAdd("d", intPeriod, sDate) + NWD
  11. End Function
复制代码
没有测试,你自己测试一下看看!再修改!
12#
发表于 2012-6-25 17:07:32 | 只看该作者
sdate 订单确定日
intperiod 周期天数
好像还不对,加上非工作天数后,这段额外的天数中也许又有周六日!!!!!!!!
13#
 楼主| 发表于 2012-6-25 19:35:45 | 只看该作者
Henry D. Sy 老师,谢谢帮助明天回公司试试
14#
发表于 2012-6-25 20:00:07 | 只看该作者
yanwei82123300 发表于 2012-6-25 19:35
Henry D. Sy 老师,谢谢帮助明天回公司试试

这个结果肯定不行,我试试递归!
15#
发表于 2012-6-25 20:11:57 | 只看该作者
  1. Public Function gDeliveryDay(sDate As Date, intPeriod As Integer) As Date
  2.     Dim i As Integer, NWD As Integer
  3.     Dim myDate As Date
  4.     Dim gDate As Date
  5.     For i = 1 To intPeriod
  6.         myDate = DateAdd("d", i, sDate)
  7.         If Weekday(myDate) = 1 Or Weekday(myDate) = 7 Then
  8.             NWD = NWD + 1
  9.         End If
  10.     Next
  11.         gDate = DateAdd("d", intPeriod, sDate)
  12.     If NWD = 0 Then
  13.         gDeliveryDay = gDate
  14.     Else
  15.         gDeliveryDay = gDeliveryDay(gDate, NWD)
  16.     End If
  17. End Function
复制代码
引用
  1. SELECT 表1.下单日期, 表1.周期, gDeliveryDay([下单日期],[周期]) AS 交货日期
  2. FROM 表1;
复制代码

本帖子中包含更多资源

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

x
16#
发表于 2012-6-25 21:14:59 | 只看该作者
请参考如下函数:
Function SE(sDay As Date, eDay As Date)
Dim intTotalDays As Integer '总天数
Dim intWeekendDays As Integer '总周六、日天数
'SE总工作日天数=总天数-总周六、日天数
Select Case DatePart("w", sDay, vbMonday)
    Case Is = 6
        sDay = DateAdd("d", sDay, 2)
    Case Is = 7
        sDay = DateAdd("d", sDay, 1)
End Select

Select Case DatePart("w", eDay, vbMonday)
    Case Is = 6
        eDay = DateAdd("d", eDay, -1)
    Case Is = 7
        eDay = DateAdd("d", eDay, -2)
End Select

intTotalDays = DateDiff("d", sDay, eDay) + 1
intWeekendDays = DateDiff("ww", sDay, eDay, vbMonday) * 2
SE = intTotalDays - intWeekendDays
End Function
17#
发表于 2012-6-26 00:33:37 | 只看该作者
18#
 楼主| 发表于 2012-6-26 08:21:38 | 只看该作者
谢谢帮助!!{:soso_e179:}
19#
发表于 2012-6-26 08:43:18 | 只看该作者
Function JHRQ(ByVal ddrq As Date, ByVal sczq As Long) As Date

'参数说明:ddrq订单日期,sczq生产周期
'函数功能:订单日期(不计周日六)+生产周期(不计周日六),计算出发货日期
'layaman_999
'容易误解的:
'1.周六\日确定的订单,顺延确定日期为周一(例如周六的订单,生产周期1天的话,应该是下周二交货)
'2.发货日期如遇上周六\日,,发货确定日期为周一(例如周五的订单,生产周期1天的话,应该是下周一交货)

Dim i As Long
Dim j As Long
Dim K As Integer

j = 0

For i = 1 To sczq
K = Weekday(ddrq + j)
Select Case K
   Case 1 '星期日
    j = j + 1
   Case 7 '星期六
    j = j + 2
End Select
  j = j + 1
Next i

JHRQ = ddrq + j

K = Weekday(JHRQ)
Select Case K
   Case 1 '星期日
    JHRQ = JHRQ + 1
   Case 7 '星期六
    JHRQ = JHRQ + 2
End Select


End Function

本帖子中包含更多资源

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

x
20#
 楼主| 发表于 2012-6-26 12:18:48 | 只看该作者
layaman_999 谢谢分享!{:soso_e181:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-21 08:24 , Processed in 0.119657 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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