完成某些字段后,使字段在 MS Access 表单中可见

Posted

技术标签:

【中文标题】完成某些字段后,使字段在 MS Access 表单中可见【英文标题】:Make fields visible in MS Access form as certain fields are completed 【发布时间】:2013-12-18 22:33:03 【问题描述】:

我正在 MS Access 中构建一个表单供用户输入数据,但可能的字段太多。大多数时候只会使用大约一半的字段。

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

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

这可能吗:

1) 没有 VBA

2) 使用 VBA

【问题讨论】:

如果很多字段大部分时间都不相关,这听起来像是糟糕的数据库结构设计。考虑将其分解为多个逻辑子表单或弹出表单。 【参考方案1】:

没有 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)。您应该为所有字段提供合理的名称,以便您了解代码中发生了什么。

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

示例复选框代码:

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

【讨论】:

起初这不起作用。由于 if 语句始终为假,因此代码运行。因此,我在文本框“If WeightImpact.Value = 0 Then”上尝试了相同的代码,并且成功了。任何想法为什么它不能在复选框上工作?正如我所说,它运行但 if 语句总是变为 false。 在您的 VBA 编辑器中,单击边距,直到您的代码中出现红色/栗色条。那是一个断点。现在单击表单上的复选框,它应该会中断代码。现在将鼠标悬停在控件的值上并找出它是什么。布尔控件通常是 -1 为真【参考方案2】:

我有一个表单,它会在选择列表框值后显示某些字段。我使用 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

【讨论】:

【参考方案3】:

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

与其隐藏,不如尝试使用表达式的条件格式禁用不必要的字段。

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

示例: [fld1]="是"

点击禁用的框 点击确定 点击确定

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

【讨论】:

【参考方案4】:

我有同样的问题,我做了以下:

Private Sub Field1_Click()
If Field1 = "Yes" Then
Me.Field2.Visible = True
Else: Me.Field2.Visible = False
End If
End Sub

但是现在我有其他问题,当我更改记录时,我选择在最后一条记录中可见的字段现在在当前记录中可见,尽管我没有选择任何选项。

谢谢,

【讨论】:

是答案还是问题? 回答您的问题...两者都有! :P

以上是关于完成某些字段后,使字段在 MS Access 表单中可见的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 中查找哪个表单字段指向哪个数据库字段

选项卡到 MS Access 中子表单的第一个字段

如何在 MS-Access 的表单上显示 Web 浏览器控件中的表格字段内容?

可以通过 VBA 更改 MS Access 子表单字段吗?

VBscript 在 MS Access 2010 中制作问卷表格

MS Access 2010 - 如何根据以前的输入以编程方式显示表单字段?