Контроль доступа MS Textbox Time - PullRequest
0 голосов
/ 03 июля 2018

Мне интересно, можно ли контролировать время, введенное в текстовое поле 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 голосов
/ 03 июля 2018

Да, это возможно, но это занимает немного - на самом деле так много, что я написал статью о том, как:

Ввод 24-часового времени с маской ввода и полной проверкой в ​​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
0 голосов
/ 03 июля 2018

Вы можете округлить введенное время, например, в событии 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...