基于另一个单元禁用单元格

时间:2011-08-16 19:46:41

标签: ms-access

在表单上的Access 07中:我需要根据下拉列表禁用两个单元格。换句话说,如果用户从下拉列表中选择“新”,则其他两个单元格将被禁用。我相信我需要右键单击下拉列表,构建代码,但我不知道我需要使用的IF ...脚本。

1 个答案:

答案 0 :(得分:3)

假设您的表单包含一个名为cboMyField的组合框,该组合框绑定到表单记录源中名为MyField的字段,以及两个文本框:txtField2绑定到Field2;和txtField3绑定到Field3。

您可以通过调用表单代码模块中的过程来检查组合的值并适当地设置两个文本框的Enabled属性。

Private Sub SetButtonStatus()
    If Me.cboMyField = "new" Then
        Me.txtField2.Enabled = False
        Me.txtField3.Enabled = False
    Else
        Me.txtField2.Enabled = True
        Me.txtField3.Enabled = True
    End If
End Sub

从表单的On Current事件中调用该过程,以便在行之间导航时设置文本框状态。

Private Sub Form_Current()
    SetButtonStatus
End Sub

对cboMyField的After Update事件执行相同操作,以便根据cboMyField的用户更改更新文本框状态。

Private Sub cboMyField_AfterUpdate()
    SetButtonStatus
End Sub

编辑,疑难解答:因为您正在使用Access 2007.将数据库放在受信任的位置并从那里运行它。见Get started with Access 2007 security

<强> EDIT2 : 暂时更改SetButtonStatus过程以检查它是否运行,以及它如何运行时看到组合框值。

 Private Sub SetButtonStatus()
        MsgBox "SetButtonStatus"
        MsgBox "Value of cboMyField is '" & Me.cboMyField & "'"
        If Me.cboMyField = "new" Then
            Me.txtField2.Enabled = False
            Me.txtField3.Enabled = False
        Else
            Me.txtField2.Enabled = True
            Me.txtField3.Enabled = True
        End If
    End Sub

同时将Option Explicit添加到模块的声明部分(顶部)。然后从VB编辑器的主菜单中选择Debug-&gt; Compile。这项工作应告诉我们代码是否包含VBA无法识别的任何名称。

Edit3 :从私人通信中,组合的绑定字段是数字数据类型,因此永远不能等于“new”。因此,每次运行该过程时,它都会将文本框Enabled属性设置为True。