首页 > 解决方案 > 选中复选框时使用 VBA 启用文本框

问题描述

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

那么,如果“要求进行调查?” 框被选中 启用“请求调查日期”框以供用户输入日期。

我有以下代码:

  Private Sub CheckSurveyRequested_AfterUpdate()

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

End Sub

但是当我运行第 5 行时,会出现“需要 424 对象”错误。

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

标签: ms-accessvba

解决方案


您绝对应该使用该AfterUpdate事件——将文本框的行为与单击事件联系起来意味着使用键盘导航表单的用户不会获得相同的行为。

此外,您应该在表单加载时复制此行为:如果复选框的默认值为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

推荐阅读