如何连接文本框以在 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 似乎决心不改变)但这只花了几分钟时间。
StartTime
和 EndTime
个文本框
- 格式: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
我有一些文本框,我想用它来计算两个时间段之间的时间长度。
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 似乎决心不改变)但这只花了几分钟时间。
StartTime
和 EndTime
个文本框
- 格式: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