【发布时间】:2018-04-15 01:28:56
【问题描述】:
我知道 Access 不直接支持网络日。我也知道我可以使用 VBA 来解决表单上一条记录的任意两个值的网络天数。但是,我想解决表中所有记录的网络天数。示例:需要找到在少于一定数量的“工作日”内打开/完成/其他的记录的百分比)为此,我需要一列每个项目花费了多少网络天数。
我已经尝试过他在查询设计中创建新字段。
Test:DateDiff([Initiated Date],[Closed Date],"d")-((DateDiff([Initiated Date],[Closed Date],"d")+Weekday([Initiated Date],3 )-Weekday([Closed Date],3))/7)2)+1(Weekday([Initiated Date],3)>5)-(Weekday([Closed Date],3) -4)*(平日([关闭日期],3)>4)
我已经尝试了一些我在网上找到的变体,但这是我唯一可以执行的变体,但所有值都带有#Error。
((旁注:在设计视图中,我在查询的“字段”区域中将其输入为一条连续的线。有点像您可以使用...直接创建一个新字段。新字段名:[Field1]*[Field2] 。我只是提出这个问题,因为有人认为有必要编辑我的帖子并将 Test: 移动到自己的行....谁知道我对 Test 的使用:([广泛的东西] ) 是问题的一部分!!!?如果有人字面上说“这是我在某处“拥有”的“东西”,请不要理会原始帖子))
我尝试过的另一个选项是在 VBA 中创建一个新字段,但让 fld.Expression 引用一个函数。 (我不相信我能做或什至做不正确......)
注意:'tblVBA 是一个临时表(我不存储这些计算值。)
Private Sub btncreate_Click()
Dim db As DAO.Database
Dim TD As DAO.TableDef
Dim fld As DAO.Field
Set db = CurrentDb()
Set TD = db.TableDefs("tblVBA")
Set fld = TD.CreateField("TotNetWrkDays", dbInteger)
fld.Expression = wNetworkdays([Initiated Date], [Closed Date])
TD.Fields.Append fld
MsgBox "Added"
End Sub
Public Function wNetworkdays(beginDt As Date, endDt As Date) As Integer
Dim tempDt As Date
Dim count As Integer
tempDt = beginDt
For i = 1 To DateDiff("d", beginDt, endDt)
tempDt = DateAdd("d", 1, tempDt)
If Weekday(tempDt, 2) = 6 Or Weekday(tempDt, 2) = 7 Then 'Define your scheduled day off, you can define weekday instead of weekend
count = count + 1
End If
Next i
wNetworkdays = DateDiff("d", beginDt, endDt) + 1 - count
End Function
我当然可以在 excel 中完成所有这些操作……但是,不幸的是,只能在 excel 中找到数据库之外的一些简单统计数据。
更新:2017 年 11 月 2 日下午 2:30 非常感谢 Kostas K. !!!我没有意识到您可以从基本上解决了我的问题的查询中调用函数。然而,我确实使用我的原始函数作为提供的解决方案......示例:在 2016 年 3 月 17 日和 2016 年 8 月 11 日之间产生 105 的结果,而不是 NETWORKDAYS 的 106。我之前发布的代码(我发现在线顺便说一句)确实像excel一样给出106。 *对于关闭日期不可用的所有情况,我仍需要添加返回 Null。但无论哪种方式,问题都已回答谢谢!
【问题讨论】:
-
这是 NETWORKDAYS 或网络工作日,但“网络日”会让您的读者感到困惑。
标签: ms-access vba field datediff