У меня есть несколько дат в форме, и я начал проверять их по отдельности.Хотел заменить все эти проверки одной функцией, которая могла быть вызвана из каждого из их событий перед обновлением.Проблема в том, что я не могу заставить фокус оставаться на элементе управления, когда проверка не проходит.
Public Function CheckDate(datefield As TextBox) As Integer
Dim this_date As Date
Dim DOB As Date
Dim first_seen As Date
this_date = Conversion.CDate(datefield.text)
DOB = [Forms]![generic]![date_of_birth]
first_seen = [Forms]![generic]![date_first_seen]
If Not IsNull(this_date) Then
'date of birth must precede any other date
If this_date < DOB Then
MsgBox "This date precedes the date of birth", vbExclamation, "Invalid date"
CheckDate = -1
Exit Function
End If
'date can't be in the future
If this_date > DateTime.Date Then
MsgBox "This date is in the future", vbExclamation, "Invalid date"
CheckDate = -1
Exit Function
End If
'all investigation/treatment dates must be >= date first seen
If Not IsNull(first_seen) Then
If this_date < first_seen Then
MsgBox "This date precedes the date patient was first seen", vbExclamation, "Invalid date"
CheckDate = -1
Exit Function
End If
End If
End If
End Function
В пределах
Private Sub xray_date_BeforeUpdate(Cancel As Integer)
Я пробовал:
Call CheckDate(xray_date)
, которое отображает правильное сообщение, но перемещает фокус из элемента управления вместо того, чтобы сохранять его для редактирования.
Cancel = CheckDate(xray_date)
, похоже, ничего не делает, что позволяет передавать недопустимые данные на хранение.Итак, каким образом я должен вызывать функцию, чтобы событие CancelU до обновления было установлено в значение True, если проверка не удалась?