MS Access:如何根据子表单中的字段打开表单

Posted

技术标签:

【中文标题】MS Access:如何根据子表单中的字段打开表单【英文标题】:MS Acess: How to open form depending on field in subform 【发布时间】:2013-09-22 16:22:29 【问题描述】:

我有一个表 table_clients 和一个连接表 (1-->many) table_invoices。

我有两种形式:

form1(table_clients):所有带有 subform1(table_invoices) 的客户:每个客户的所有发票

form2 和 subform2 相同,只是对象在页面上的放置方式不同。

我希望当我在 form1/subform1 上打开记录时,能够单击按钮并打开按 invoice_id 和 client_id 过滤的 form2/subform2。

谢谢!

【问题讨论】:

【参考方案1】:

您可以使用以下内容打开子表单,设置过滤器,然后指定过滤器。

Private Sub cmdOpenSubForm_Click()
  DoCmd.OpenForm "table_clients"
  Forms!table_invoices.FilterOn = True
  Forms!table_invoices.Filter = "client_id = " & [txtClientID].value
End Sub

另外,如果子表单在主表单上的记录发生更改时打开,您可能需要在子表单上重新应用过滤器,然后刷新。这将在主窗体的On Current 事件中完成:

Private Sub Form_Current()
  On Error Resume Next
  Forms!table_invoices.Filter = "client_id = " & [txtClientID].value
  Forms!table_invoices.Refresh
End Sub

在上面的示例中,您必须有一个名称为 cmdOpenSubForm 的按钮。子表单必须命名为table_invoices。该按钮必须位于table_clients 表单上。 On Current 代码应位于table_clients 表单上。 invoice_idclient_id 假定为数字。 table_clients 表单包含一个名为 txtClientID 的文本字段。假设txtClientID字段引用了table_clients的主键,table_invoices中的client_id字段是对应的外键。

如果您点击cmdOpenSubForm 按钮,结果会是:

table_invoices 表单将打开 table_invoices 将被过滤以显示所有发票记录 对于当前存在于table_clients 中的client_id 表格

如果您想进一步限制发票记录,而不是添加到过滤器中。

【讨论】:

您好,我收到运行时错误 438:对象不支持此属性或方法。此外,client_id 位于 invoice_id 的父表单上。不应该以某种方式说明吗?谢谢! 我更新了我的答案。我有一个错误应该有一个! 在Forms 和table_invoice 之间而不是. 我还添加了一个更好的解释。希望它有所帮助。

以上是关于MS Access:如何根据子表单中的字段打开表单的主要内容,如果未能解决你的问题,请参考以下文章

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

子表单在 MS Access 中的主表单之前打开

MS Access 保留子表单中的 ID 字段,填充父表单中的 ID

根据组合框选择切换表单上其他字段的可见性 - MS Access

MS Access 子表单的多个分离条件

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