MS Access文本框时间控件

时间:2018-07-03 02:57:03

标签: ms-access time

我想知道是否可以控制在MS Access文本框中输入的时间。例如,仅允许用户输入半小时间隔(08:30、10:00、13:30)中的时间,因为我不想以奇怪的时间输入结束(即13:37、16:42)。试图使用计算控件,但效果似乎不太好。有什么建议或建议吗?

我的文本框中的计算控件

=IIf((Minute([TxtStartTime1]) Mod 30=0),[TxtStartTime1],"00:00")

下面是我的表单的屏幕截图。

MS Access Txtbx Time Control

2 个答案:

答案 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