访问报告 - 总计一个变量

Access Report - Totalling a variable

我有一份报告让我在有薪期间一直休假。我有一个查找表,我可以在其中选择支付期开始日期和结束日期。它按员工姓名提取在该支付期间休假的所有记录,然后计算该期间的总休假时间。例如,员工从 2015 年 9 月 8 日到 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。它不是从我对每条记录所做的计算中得出的。

解释一下我想要的:员工在 2015 年 9 月 27 日至 2015 年 10 月 10 日的支付期间有以下情况:

  1. 假期 2015 年 9 月 8 日至 2015 年 10 月 2 日 - 在此支付期间 2015 年 9 月 27 日至 2015 年 10 月 2 日 - 或 40 小时假期
  2. Vacation 10/10/15 - 这个时间段 10/10/15 或 8 小时假期

在“员工”页脚中,我希望它显示此支付期间总共有 48 小时的假期。

请帮忙!提前致谢!

您正在求和 [TimeOffThisPeriod],但此字段已格式化。格式化总是意味着一个值以某种方式转换为字符串。此字段是否始终包含可以转换回数字的值?

试试这个:

=Sum(IIf([tblCodesWork]![Description]="Vacation Time",
         IIf(IsNumeric([TimeOffThisPeriod]),CDbl([TimeOffThisPeriod]),0), 0))

如果它仍然不起作用,您可能必须创建一个安全的 CDbl 函数,如果字符串不是数字,它不会抛出错误,因为 Iff 总是评估这两种情况。 IE。 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))