我有一份报告给了我一个付薪期的所有时间。我有一个查找表单,我在其中选择付款期开始日期和结束日期。它按员工姓名提取所有记录,并在该支付期间休假,然后计算该期间的总休假时间。例如,员工从2015年9月8日到2015年2月2日度假,总共休假152个小时。在2015年9月27日至10月10日的付款期间,他们已经休息了40个小时。我通过在报表上创建多个隐藏文本框然后将最后一个计算显示为关闭小时数来计算。工作得很漂亮!以下是我创建的文本框:
'get hours off if begin time and end time off are entered.
vHoursOff = =IIf([BeginTime]="",0,[hoursoff])
'get days off in time period
vDaysOff = IIf([vbd1] = [ved1], 1, Workdays([vbd1], [ved1]))
vDaysOff2 = IIf(IsNull([BeginTimeOff]), [vDaysOff], 0)
'add hours off and days off to get total hours off
vtothoursoff = ([vDaysOff2] * 8) ' + [vHoursOff]
TimeOffThisPeriod = =Format(IIf([Hours]>0,[Hours],"-" & [vtothoursoff]),"Standard")
我的问题 - 我希望按照休假时间(病假,假期,个人,补偿)计算该支付期的休息时间。我试过了:
=Sum(IIf([tblCodesWork]![Description]="Vacation Time",[TimeOffThisPeriod],0))
它为我提供了一个输入TimeOffThisPeriod的框。它不是从我对每条记录的计算中得出的。
解释我的需求:员工在9/27/15到10/10/15的付款期间有以下内容:
在员工页脚中,我希望它在此付款期间共显示48小时的假期。
请帮忙!并提前感谢!
答案 0 :(得分:0)
您正在对[TimeOffThisPeriod]
进行求和,但此字段已格式化。格式化始终意味着值以某种方式转换为字符串。此字段是否始终包含可以转换回数字的值?
试试这个:
=Sum(IIf([tblCodesWork]![Description]="Vacation Time",
IIf(IsNumeric([TimeOffThisPeriod]),CDbl([TimeOffThisPeriod]),0), 0))
如果它仍然不起作用,您可能必须创建一个安全的CDbl
函数,如果该字符串不是数字,则不会抛出错误,因为Iff
始终会评估这两种情况。即即使CDbl([TimeOffThisPeriod])
为IsNumeric([TimeOffThisPeriod])
,也会对False
进行评估。
Public Function SafeCDbl(ByVal x As Variant) As Double
If IsNumeric(x) Then
SafeCDbl = CDbl(x)
Else
SafeCDbl = 0
End If
End Function
然后将你的求和表达式改为:
=Sum(IIf([tblCodesWork]![Description]="Vacation Time", SafeCDbl([TimeOffThisPeriod]), 0))