【问题标题】:Use VBA to enable a text box when a check box is checked选中复选框时使用 VBA 启用文本框
【发布时间】:2019-03-26 00:55:42
【问题描述】:

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

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

我有以下代码:

  Private Sub CheckSurveyRequested_AfterUpdate()

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

End Sub

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

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

【问题讨论】:

  • 删除 Set 关键字。只需DateSurveyReq.Enabled = False
  • 提示:DateSurveyReq.Enabled = CheckSurveyRequested.Value 是实现这一目标的一个很好的单线。
  • 对不起,Set 是一个错字,我已经把它去掉了,但仍然出现同样的错误
  • 能否请您澄清我如何使用DateSurveyReq.Enabled = CheckSurveyRequested.Value 代替?这似乎也不适合我
  • 第 5 行是Else。你指的是哪一行?

标签: ms-access vba


【解决方案1】:

您绝对应该使用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

【讨论】:

  • 在您的最后一个示例中,该函数不应该作为表单的 Load 事件的一部分分配给 AfterUpdate 事件吗?
  • @LeeMac:你是对的。当我回到电脑前时,我会更新。
【解决方案2】:

我会建议以下 -

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

【讨论】:

  • 我已经尝试过了,但不幸的是发生了同样的“需要 424 对象”错误
  • @Alex 这个错误必须出现在你代码的其他地方,因为上面是有效的 VBA。
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多