Лучше всего подойдет пользовательская функция, которая возвращает True
или False
. Если пользователь вводит что-то, что возвращает False
, верните код и пользователь вводит новый номер.
Это было лучшее из того, что я мог придумать для защиты от неискушенных пользовательских записей.
Function CheckTime(inputasString) As Boolean
Dim theDoubleDotThing As Long
theDoubleDotThing = InStr(1, inputasString, ":", vbBinaryCompare)
If theDoubleDotThing = 0 Then
GoTo NOPE
End If
Dim theHOUR As Long, theMinute As Long
On Error GoTo NOPE
theHOUR = CLng(Mid(inputasString, 1, theDoubleDotThing - 1))
theMinute = CLng(Right(inputasString, 2))
On Error GoTo 0
If Right(inputasString, 3) <> ":" & Right(inputasString, 2) Then
GoTo NOPE
ElseIf theHOUR > 12 Then
GoTo NOPE
ElseIf theMinute > 60 Then
GoTo NOPE
End If
CheckTime = True
Exit Function
NOPE:
End Function
Так что вставьте это в свой код ....
Private Sub bTNOK_Click()
If CheckTime(textboxhour.Value) Then
textboxhour.Value = Format(textboxhour.Value, "HH:mm")
Else
MsgBox "what the heck is " & textboxhour.Value & "?!?!?", vbCritical, Title:="Come On Man"
End If
End Sub
EDIT
Чтобы помочь оператору, я создал пример файла , в котором есть кнопка для приглашения, а затем проверяется строка.