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

问题描述 投票:1回答:2

我是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'错误。

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

vba ms-access access-vba
2个回答
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
投票

我建议如下 -

Private Sub CheckSurveyRequested_AfterUpdate()
    DateSurveyReq.Enabled = CheckSurveyRequested
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.