Используйте VBA для включения текстового поля, когда установлен флажок - PullRequest
1 голос
/ 22 марта 2019

Я новичок в VBA и пытаюсь создать форму в Access, в которой текстовое поле включено или отключено в зависимости от того, установлен флажок или нет.

Так что, если 'Survey Requested?Если флажок установлен, поле «Дата опроса запрошено» позволяет пользователю вводить дату.

У меня есть следующий код:

  Private Sub CheckSurveyRequested_AfterUpdate()

If CheckSurveyRequested = True Then
    DateSurveyReq.Enabled = True
Else
    DateSurveyReq.Enabled = False
End If

End Sub

Но при этом появляется объект '424Обязательная ошибка при запуске строки 5.

У кого-нибудь есть предложения относительно того, что я здесь делаю неправильно?

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Вам определенно следует использовать событие AfterUpdate - привязка поведения вашего текстового поля к событию click означает, что пользователь, использующий клавиатуру для навигации по форме, не получит такое же поведение.

Кроме того, вам следует повторить это поведение при загрузке формы: если значение по умолчанию для флажка равно False, тогда текстовое поле должно быть отключено при загрузке формы.

Также, как отмечает @ErikA, вы можетесделайте это с одной читаемой строкой.

Поэтому я бы порекомендовал что-то вроде этого:

Option Explicit

Private Sub chkSurveyRequested_AfterUpdate()
    Me.txtDateSurveyReq.Enabled = Me.chkSurveyRequested.value
End Sub

Private Sub Form_Load()
    Me.txtDateSurveyReq.Enabled = Me.chkSurveyRequested.value
End Sub

Чтобы не повторяться, вы можете переместить этот код в отдельную подпрограмму:

Опция Явная

Private Sub Form_Load()
    ' assign the function below to the AfterUpdate event of the checkbox.
    Me.chkSurveyRequested.AfterUpdate = "=UpdateControls()"

    ' now execute the function directly
    UpdateControls
End Sub

Private Function UpdateControls()
    Me.txtDateSurveyReq.Enabled = Me.chkSurveyRequested.value
End Function
1 голос
/ 22 марта 2019

Я бы предложил следующее -

Private Sub CheckSurveyRequested_AfterUpdate()
    DateSurveyReq.Enabled = CheckSurveyRequested
End Sub
...