选中复选框时,使用VBA启用文本框

时间:2019-03-22 12:41:01

标签: vba ms-access access-vba

我是VBA的新手,我正在尝试在Access中创建一个表单,其中根据复选框是选中还是未选中来启用或禁用文本框。

那么,如果要求“调查”?框被选中,“要求的日期调查”框已启用,以便用户输入日期。

我有以下代码:

  Private Sub CheckSurveyRequested_AfterUpdate()

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

End Sub

但是当我运行第5行时,这会出现“ 424 Object Required”错误。

有人对我在这里做错了什么建议吗?

2 个答案:

答案 0 :(得分:2)

您绝对应该使用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 :(得分:1)

我建议以下内容-

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