我是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'错误。
有人建议我在这里做错了吗?
你绝对应该使用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
我建议如下 -
Private Sub CheckSurveyRequested_AfterUpdate()
DateSurveyReq.Enabled = CheckSurveyRequested
End Sub