我有一些文本框,我想用它来计算两个时间段之间的时间长度。
Start
08
:00
End
16
:00
Break
30
我尝试过使用DateDiff(" n",08
&":"& 00
,16
&":"& 00
) - (30
* 60)但得到#Name错误。
我还需要转换为小时分钟,如果上述功能正常工作我会使用(DateDiff(" n",08
&":& #34;& 00
,16
&":"& 00
) - (30
* 60))/ 60& ":" MOD(DATEDIFF(" N" 08
&安培;":"&安培; 00
,16
&安培;":& #34;& 00
) - (30
* 60))让7:30
显示在最终文本框中。
答案 0 :(得分: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似乎决心不改变),但这只需要花费几分钟才能完成。
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