Vba 在下拉菜单的结果上显示/隐藏表单中的字段

Vba 在下拉菜单的结果上显示/隐藏表单中的字段,vba,ms-access,Vba,Ms Access,我正在构建一个表单,该表单在三个单独的访问表上进行数据查询 我的问题是,我以前版本的for有太多字段,因此最终用户感到困惑。我有一个下拉菜单,有四个不同的选项。这是唯一可以选择的四个字段,以防止随机数据输入,根据选择的字段,我希望显示一些字段,而其他字段不显示,因为它们与此无关。我还希望当用户浏览表单记录时,也能做到这一点,即:根据下拉菜单中的值显示/隐藏字段 我尝试过使用以下代码我是VBA的完全初学者: Private Sub Status_Change() If Status.Val

我正在构建一个表单,该表单在三个单独的访问表上进行数据查询

我的问题是,我以前版本的for有太多字段,因此最终用户感到困惑。我有一个下拉菜单,有四个不同的选项。这是唯一可以选择的四个字段,以防止随机数据输入,根据选择的字段,我希望显示一些字段,而其他字段不显示,因为它们与此无关。我还希望当用户浏览表单记录时,也能做到这一点,即:根据下拉菜单中的值显示/隐藏字段

我尝试过使用以下代码我是VBA的完全初学者:

Private Sub Status_Change()
    If Status.Value = "Blue" Then
        Me.Field_1.Visible = False
        Me.Field_2.Visible = False
        Me.Field_3.Visible = False
        Me.Field_4.Visible = False
        Me.Field_5.Visible = False
        Me.Field_6.Visible = False
        Me.Field_7.Visible = False
    Else
    If Status.Value = "Green" Then
        Me.Field_1.Visible = True
        Me.Field_2.Visible = False
        Me.Field_3.Visible = False
        Me.Field_4.Visible = False
        Me.Field_5.Visible = False
        Me.Field_6.Visible = True
        Me.Field_7.Visible = True
    Else
    If Status.Value = "Red" Then
        Me.Field_1.Visible = True
        Me.Field_2.Visible = False
        Me.Field_3.Visible = False
        Me.Field_4.Visible = False
        Me.Field_5.Visible = False
        Me.Field_6.Visible = True
        Me.Field_7.Visible = True
    Else
    If Status.Value = "Yellow" Then
        Me.Field_1.Visible = True
        Me.Field_2.Visible = True
        Me.Field_3.Visible = True
        Me.Field_4.Visible = True
        Me.Field_5.Visible = True
        Me.Field_6.Visible = False
        Me.Field_7.Visible = True
    Else
    If Status.Value = "Orange" Then
        Me.Field_1.Visible = True
        Me.Field_2.Visible = False
        Me.Field_3.Visible = False
        Me.Field_4.Visible = False
        Me.Field_5.Visible = False
        Me.Field_6.Visible = False
        Me.Field_7.Visible = True
    End If
End Sub
到目前为止,它还不起作用,我也不确定我做错了什么。有人能帮我吗

提前谢谢


编辑:无论浏览记录或输入新记录时状态值显示什么,字段都保持可见。没有给出错误。

我建议使用AfterUpdate事件而不是OnChange事件

假设Status是一个combobox,您可能希望检查combobox的绑定列是否包含您正在测试的值

请注意,您的代码可以简化为以下内容:

Private Sub Status_AfterUpdate()
    Me.Field_1.Visible = Status <> "Blue"
    Me.Field_2.Visible = Status = "Yellow"
    Me.Field_3.Visible = Status = "Yellow"
    Me.Field_4.Visible = Status = "Yellow"
    Me.Field_5.Visible = Status = "Yellow"
    Me.Field_6.Visible = Status = "Green" or Status = "Red"
    Me.Field_7.Visible = Status <> "Blue"
End Sub

对不起,没有澄清。“Status”值来自具有相同名称的access tables列的on,是一个具有四个选项的下拉菜单。我将尝试“AfterUpdate”活动。我知道我的代码太长了…>。>好的,我已经选中了,组合框的属性如下:行源包含四个可能的值,行源类型列为值列表,绑定列为1。我已经测试了代码,我同意它比我所拥有的要好得多,但是不管状态值是什么,字段仍然保持可见。如果绑定列是1,那么行源中的第一列1是否包含我们正在测试的值?e、 蓝色、黄色等。是的,这实际上是一个下拉菜单,上面的评论中有五个值出错,可以选择的是五个值,而不是四个。这个表中包含的状态列的每个单元格都有一个下拉菜单,所以在创建新记录或更新当前记录时可以选择它。我仍然对此感到困惑。不确定我做错了什么,导致字段保持可见,不管状态字段值如何。我注意到,当表单位于表单视图编辑字段中时,我无法在表单中添加任何数据,甚至无法添加新记录。我选中了“属性数据”选项卡,允许进行编辑。我开始认为这是由于我根据我在数据库中使用的三个表的查询结果建立了这个表单造成的。什么不起作用?你有错误吗?解释哪些不起作用。无论在浏览记录或输入新记录时状态值显示什么,字段都保持可见。没有给出错误。