Office中国论坛/Access中国论坛

标题: 请教这个workdays的代码 [打印本页]

作者: sarfeilee    时间: 2008-3-25 13:51
标题: 请教这个workdays的代码
Function newNetWorkDays(BegDate As Date, EndDate As Date) As Integer

Dim DateCnt As Date
Dim EndDays As Date
Dim IntDays As Integer

DateCnt = DateValue(BegDate)

EndDays = DateValue(EndDate)

IntDays = 0

        
        Do While DateCnt <= EndDays
        
        
          If Format((IsNull(DLookup("id", "holiday", "&ETH;&Yacute;&Iuml;&cent;&Egrave;&Otilde;&AElig;&Uacute;=#" & DateCnt & "#"))) _
               And Format(DateCnt, "ddd") <> "Sun" And Format(DateCnt, "ddd") <> "Sat") Or _
              Format(Not IsNull(DLookup("id", "workday", "&frac14;&Oacute;°à&Egrave;&Otilde;&AElig;&Uacute;=#" & DateCnt & "#"))) Then
        
               IntDays = IntDays + 1

          End If

    DateCnt = DateAdd("d", 1, DateCnt)
   
      
   Loop
   

newNetWorkDays = IntDays - 1

End Function


这个代码能够计算出如果BegDate小于或等于EndDate的相差工作日,但是如果大于,则计算出的所有值都是-1,请问能够将负值也体现出差别多少工作日吗,而不是全部都显示-1
作者: andymark    时间: 2008-3-25 14:37
贴出的代码部分乱码,请修正一下
作者: sarfeilee    时间: 2008-3-25 14:50
这个乱码是引用holiday & workday两个表的日期字符段名称,对整个代码阅读没有影响,请帮忙解决一下我提的问题
作者: sarfeilee    时间: 2008-3-25 15:34
[:30] 有没有高人阿  麻烦指点阿  急!
作者: andymark    时间: 2008-3-25 15:55
因为根本就没查到数据,返回值为0, newNetWorkDays = IntDays - 1
上面语句查询天为0时 返回结果为-1
作者: andymark    时间: 2008-3-25 15:56
你举个例子就行吧
作者: sarfeilee    时间: 2008-3-25 15:58
那么DateCnt >EndDays的代码应该怎么补充进去呢   高手!
作者: andymark    时间: 2008-3-25 16:05
把参数改为:
Do While DateCnt < EndDays

datecnt是最小的日期,enddays的最大的日期
作者: andymark    时间: 2008-3-25 16:06
同时删除下面这句话
newNetWorkDays = IntDays - 1
作者: andymark    时间: 2008-3-25 16:08
如果看不明白,或者返回错误结果的,建议上传例子
作者: sarfeilee    时间: 2008-3-25 16:35
请看附件里的query1
作者: andymark    时间: 2008-3-25 16:51
Expr1: IIf([enddate]>=[date],Works_Days([date],[enddate]),Works_Days([enddate],[date]))
作者: ljtao8888    时间: 2008-3-25 16:52
学习学习




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3