【问题标题】:How do I concatenate textboxes to use DateDiff in MS Access 2010如何连接文本框以在 MS Access 2010 中使用 DateDiff
【发布时间】:2018-09-21 00:01:48
【问题描述】:

我有一些文本框可以用来计算两个时间段之间的时间长度。

Start0800
End1600

Break30

我试过使用 DateDiff("n",08&":"&00,16&":"&00) - (30*60) 但得到#名称错误。

然后我还需要转换为小时分钟,如果上述功能正常工作,我会使用 (DateDiff("n",08&":"&00,16&":"& 00) - (30*60)) / 60 & ":" MOD(DateDiff("n",08&":"&00,16&":"&00 ) - (30*60)) 让7:30 显示在最终的文本框中。

【问题讨论】:

    标签: sql forms ms-access textbox datediff


    【解决方案1】:

    要计算两次之间的小时数,减去休息时间,我们可以使用:

    (StartHH+(StartMM/60)-(EndHH+(EndMM/60)-(BreakMM/60)
    
    ((16)+(00/60))-((08)+(00/60))-(30/60) = 7.5
    

    ....只要轮班从不超过午夜。

    或者,同样的结果:

    StratHH-EndHH+(StartMM-EndMM-BreakMM)/60
    

    使用TIMESERIAL的替代方法:

    (TimeSerial(StartHH, StartMM, StartSS) - TimeSerial(EndHH, EndMM, EndSS) - TimeSerial(BreakHH, Break, BreakSS)) * 24

    (TimeSerial(16, 0, 0) - TimeSerial(8, 0, 0) - TimeSerial(0, 30, 0)) * 24 = 7.5

    ...或格式化:

    Format((TimeSerial(16, 0, 0) - TimeSerial(8, 0, 0) - TimeSerial(0, 30, 0)),"HH\hmm\m") = "07h30m"

    Format((TimeSerial(16, 0, 0) - TimeSerial(8, 0, 0) - TimeSerial(0, 30, 0)),"HH:mm") = "07:30"


    使用数据验证而不是多个文本框

    作为如何显着简化数据输入并完全消除用户错误的示例,这里有一个使用数据验证的表单,并辅以 Total Hours 框以进行快速验证。确保准确性的另一个好方法是,如果可以安排轮班,则可以比较实际工作时间以通知大的差异。

    我不会详细解释,因为它不是问题的一部分(而且 OP 似乎决心不改变),但这只花了几分钟时间。

    StartTimeEndTime 文本框
    - 格式:hh:nn;;"H:mm"
    - 输入掩码:90:00;0;_
    - 验证文本:Please double check your shift time!

    BreakMins 文本框
    - 格式:0
    - 输入掩码:00

    表单模块

    Option Explicit
    
    Dim breakHr As Single, totalhr As Single
    
    Private Sub BreakMins_Exit(Cancel As Integer)
        UpdateTotal
    End Sub
    
    Private Sub endTime_Exit(Cancel As Integer)
        UpdateTotal
    End Sub
    
    Private Sub startTime_Exit(Cancel As Integer)
        UpdateTotal
    End Sub
    
    Sub UpdateTotal()
        If Nz(startTime, 0) = 0 Or Nz(endTime, 0) = 0 Then Exit Sub
        breakHr = Val(Nz(BreakMins, 0)) / 60
        '[startTime]/[endTime] textboxes hold full datetime for easy calculation
        totalhr = (endTime - startTime) * 24 - breakHr
        total = totalhr
    End Sub
    

    【讨论】:

    • 谢谢,这样简单多了。您知道将结果显示为 07:30 而不是 7.5 的更简单方法吗?
    • 谢谢@ashleedawg。刚看到。
    • 不客气。轮班不会跨过午夜,对吧?
    • 这些年来我必须制作一百万个与班次时间/日期相关的公式……一旦你使用它就很容易了。 ...您是否有理由将轮班时间存储在这样的 5 个单独的单元格中? (与 3 相反)如果这是针对许多人的转变,从长远来看,您可能会发现在一个单元格中使用 HH::MM 的“标准”形式会更容易。 (或者更好的日期和时间;如果需要,只显示日期。)
    • 谢谢@ashleedawg。这是许多非 IT 熟练用户将使用的表格,我相信这种方法比他们知道需要用冒号格式化时间更容易让他们填写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多