Ms access 完成某些字段后,使字段在MS Access窗体中可见

Ms access 完成某些字段后,使字段在MS Access窗体中可见,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我正在MS Access中构建一个表单,供用户输入数据,但可能的字段太多了。大多数情况下,只有大约一半的字段将被使用 因此,我希望某些字段仅根据用户在先前给定字段上输入的内容显示 例如:用户输入项目编号、标题,然后检查“是/否”工程。由于他检查了它,这意味着工程受到了影响,因此出现了十几个用户必须填写的字段 这是否可能: 1) 无VBA 2) 如果没有VBA,使用VBA可能是不可能的 以VBA为例: 确保窗体处于“设计”视图中 右键单击组合框,生成事件,代码生成器 这将打开表单后面的代码。它会将

我正在MS Access中构建一个表单,供用户输入数据,但可能的字段太多了。大多数情况下,只有大约一半的字段将被使用

因此,我希望某些字段仅根据用户在先前给定字段上输入的内容显示

例如:用户输入项目编号、标题,然后检查“是/否”工程。由于他检查了它,这意味着工程受到了影响,因此出现了十几个用户必须填写的字段

这是否可能:

1) 无VBA


2) 如果没有VBA,使用VBA可能是不可能的

以VBA为例:

  • 确保窗体处于“设计”视图中
  • 右键单击组合框,生成事件,代码生成器
  • 这将打开表单后面的代码。它会将您放入
    BeforeUpdate
    事件的默认代码中。我们需要的是
    Change
    事件,因此在右上角将下拉列表从
    BeforeUpdate
    更改为
    Change
    。这将为您提供如下代码:

    Private Sub Field1_Change()
    
    End Sub
    
    在这里,您需要检查组合框的值并根据需要隐藏字段:

    假设组合框的名称为Field1(当然,您的名称会有所不同),则添加一些代码,以便隐藏Field2:

    Private Sub Field1_Change()
      If Field1.Value = "Yes" Then
          Me.Field2.Visible = False
      End If
    End Sub
    
    注意,您需要知道所有字段的名称-这是在属性框(F4)中的“名称”字段的另一个选项卡中。您应该为所有字段提供合理的名称,以便了解代码中发生了什么

    对于复选框,请遵循完全相同的过程,但可能需要使用
    单击事件。只是实验

    示例复选框代码:

    Private Sub Check5_Click()
      ' Note: vbTrue = -1
      If Me.Check5 = vbTrue Then
        MsgBox ("Ticked")
      Else
    MsgBox ("Not Ticked")
      End If
    End Sub
    

    有一种方法可以在没有VBA的情况下做到这一点。不过我还是推荐VBA,因为你可以用它做更多的事情

    与其隐藏,不如尝试通过表达式禁用具有条件格式的不必要字段

    右键单击要禁用的控件。 向下点击“条件格式” 添加新规则 选择“表达式为”

    例如: [fld1]=“是”

    打残疾人箱 单击“确定” 单击“确定”


    现在,如果字段1选择了“是”,您选择的控件将禁用。

    我也有同样的问题,我执行了以下操作:

    Private Sub Field1_Click()
    If Field1 = "Yes" Then
    Me.Field2.Visible = True
    Else: Me.Field2.Visible = False
    End If
    End Sub
    
    但现在我有另一个问题,当我更改记录时,我选择在最后一条记录中可见的字段现在在当前记录中可见,尽管我没有选择任何选项


    谢谢,

    我有一个表单,在选择列表框值后,它将显示某些字段。我使用AfterUpdate功能。到目前为止,它已经奏效了。我的代码如下。ProjectName和ProjectNumber是仅在选择“工程”时才显示的字段。OtherName和OtherNumber是仅在“NotEngineering”项目中显示的字段

    通过单击选择项目类型的字段插入此代码,转到属性页上的“事件”选项卡,然后单击“更新后”,选择“代码生成器”并粘贴到VBA中

    Private Sub ProjectType_AfterUpdate()
    If ProjectType.Value = "Engineering" Then
          Me.ProjectName.Visible = True
          Me.ProjectNumber.Visible = True
     Else
          Me.ProjectName.Visible = False
          Me.ProjectNumber.Visible = False
     End If
    
    If ProjectType.Value = "NotEngineering" Then
          Me.OtherName.Visible = True
          Me.OtherNumber.Visible = True
     Else
          Me.OtherName.Visible = False
          Me.OtherNumber.Visible = False
     End If
    
    End Sub
    

    如果很多字段在大多数时候都不相关,那么这听起来像是一个糟糕的DB结构设计。考虑把它分解成多个逻辑子窗体或弹出形式。代码在if语句始终为false时运行。所以我在一个文本框“If WeightImpact.Value=0 Then”上尝试了相同的代码,结果成功了。你知道为什么这个复选框不起作用吗?正如我所说,它运行,但if语句总是变为false。在VBA编辑器中,单击边距,直到代码上出现一个红色/栗色条。这是一个断点。现在单击表单上的复选框,它应该会在代码中中断。现在将鼠标悬停在控件的值上,找出它是什么。布尔控件通常是
    -1
    ,因为它是答案还是问题?回答您的问题。。。都是!:P