我有一份报告,给了我所有的休假期。我有一个查找表单,我选择支付期的开始日期和结束日期。它按员工姓名提取在该工资期内休假的所有记录,然后计算该期间的总休假时间。例如,一名员工从2015年8月9日到2015年10月2日休假,总共休假152小时。在2015年9月27日至2015年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:
- 假期2015年8月9日至2015年10月2日-本工资期2015年9月27日至2015年10月2日-或40小时假期
- 假期10/10/15 -此时间段为10/10/15或8小时假期
在Employee页脚中,我希望它显示此工资期的总共48小时假期。
请帮忙!提前感谢!
您正在对[TimeOffThisPeriod]
求和,但该字段已格式化。格式化总是意味着以某种方式将值转换为字符串。这个字段是否总是包含一个可以转换回数字的值?
试试这个:
=Sum(IIf([tblCodesWork]![Description]="Vacation Time",
IIf(IsNumeric([TimeOffThisPeriod]),CDbl([TimeOffThisPeriod]),0), 0))
如果它仍然不工作,您可能必须创建一个安全的CDbl
函数,如果字符串不是数字,它不会抛出错误,因为Iff
总是计算两种情况。即,即使IsNumeric([TimeOffThisPeriod])
为False
,也将评估CDbl([TimeOffThisPeriod])
。
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))