我想知道是否可以控制在MS Access文本框中输入的时间。例如,仅允许用户输入半小时间隔(08:30、10:00、13:30)中的时间,因为我不想以奇怪的时间输入结束(即13:37、16:42)。试图使用计算控件,但效果似乎不太好。有什么建议或建议吗?
我的文本框中的计算控件
=IIf((Minute([TxtStartTime1]) Mod 30=0),[TxtStartTime1],"00:00")
下面是我的表单的屏幕截图。
答案 0 :(得分:1)
是的,这是可能的,但是我写了一篇有关如何做的文章花了一点时间-实际上,那花了很多时间。
Entering 24-hour time with input mask and full validation in Microsoft Access
它包含设置输入掩码,验证,单击和按键事件以及处理表单错误所需的所有代码-太多了,无法在此处发布。
代码也在 GitHub 上:VBA.TimeEntry
要四舍五入,您可以包括以下功能:
Public Function RoundTime( _
ByVal datDate As Date) _
As Date
Const cintMult As Integer = 24 '1 hour round
' Const cintMult As Integer = 48 '30 minute round
' Const cintMult As Integer = 96 '15 minute round
' Const cintMult As Integer = 144 '10 minute round
' Const cintMult As Integer = 288 '5 minute round
RoundTime = CVDate(Int(datDate * cintMult + 0.5) / cintMult)
End Function
答案 1 :(得分:0)
您可以在控件的BeforeUpdate事件中舍入输入的时间。对于四舍五入,我使用此VBA函数:
Public Function TimeRoundMinutes(dtUnrounded As Date, Optional intRoundTo As Integer = 30, Optional intOption As Integer) As Date
'rounds time of provided date to specified in intRoundTo number of minutes. intOption:
'1 - down
'2 - up
'0 or anything else - to the nearest part
Dim intMins As Integer
If intRoundTo <= 0 Then
intRoundTo = 1
ElseIf intRoundTo > 60 Then
intRoundTo = 60
End If
intMins = Minute(dtUnrounded)
Select Case intOption
Case 1
intMins = Int(intMins / intRoundTo) * intRoundTo
Case 2
intMins = -Int(-intMins / intRoundTo) * intRoundTo
Case Else
intMins = Round(intMins / intRoundTo) * intRoundTo
End Select
If intMins = 60 Then
TimeRoundMinutes = DateAdd("h", 1, Int(dtUnrounded) + TimeSerial(Hour(dtUnrounded), 0, 0))
Else
TimeRoundMinutes = Int(dtUnrounded) + TimeSerial(Hour(dtUnrounded), intMins, 0)
End If
End Function