如何连接文本框以在 MS Access 2010 中使用 DateDiff

How do I concatenate textboxes to use DateDiff in MS Access 2010

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

Start 08 : 00
End 16 : 00

Break 30

我试过使用 DateDiff("n",08&":"&00,16&":"&00) - (30*60) 但出现#Name 错误。

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

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

(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