在新窗口中打开 Access 中的子表单
Posted
技术标签:
【中文标题】在新窗口中打开 Access 中的子表单【英文标题】:Open Subform in Access in New Window 【发布时间】:2017-06-02 16:11:51 【问题描述】:我有一个访问表单(“F_Filter”),我在其中指示用于过滤数据表的参数。表单 F_Filter 还包含一个子表单,它在同一屏幕上显示过滤后的数据表结果。这个带有过滤结果的子表单被命名为“Child400”。它的源对象是“F_FilterResults”。
我希望能够 1) 在新窗口中打开子表单,以便我看到的只是过滤后的结果,以及 2) 将结果导出到 Excel。
通常我可以通过创建一个按钮并使用以下代码创建一个点击事件来在新窗口中打开一个表单
DoCmd.OpenForm "NameOfForm", acFormDS
但是,当我将“Child400”作为 NameOfForm 输入时,此代码不起作用。我认为这是因为 Child400 是一个子表单,Access 无法识别。
我也试过DoCmd.OpenForm "[F_Filter]![Child400]", acFormDS
无济于事。请注意,我也尝试过DoCmd.OpenForm "F_FilterResults", acFormDS
,它工作正常,但此表仅包含预过滤的结果。
【问题讨论】:
【参考方案1】:DoCmd.OpenForm "F_FilterResults"
是打开的正确表单。 “Child400”是(我假设)子窗体控件的名称。这不是您可以打开的表单。
然后,您需要对子表单实例应用相同的过滤器。您现在用于子表单的相同方法可以用于单独的表单。
如果您对此有疑问,请将现有过滤器代码添加到您的问题中。
编辑
表单显示的记录背后没有魔法。它由几个属性控制。最简单的方法可能是简单地将它们带到新表单中。
类似:
Sub OpenResults()
Dim fSub As Form, fNew As Form
Set fSub = Me!Child400.Form
DoCmd.OpenForm "F_FilterResults", acFormDS
Set fNew = Forms!F_FilterResults
fNew.RecordSource = fSub.RecordSource ' if you change the RecordSource in your code
fNew.Filter = fSub.Filter
fNew.FilterOn = fSub.FilterOn
fNew.OrderBy = fSub.OrderBy
fNew.OrderByOn = fSub.OrderByOn
End Sub
【讨论】:
我尝试将相同的代码应用到 F_FilterResults 但结果不一样。 (请注意,我正在将其他一些事件和参数应用于子表单和 F_FilterResults,我在帖子中没有提到它们,因为它们有些复杂并且与我现在尝试做的事情无关)。我花了几个小时试图找出将相同代码应用于 F_FilterResults 时出错的地方,但没有运气。因此,我只想做一个工作来显示我在 Child400 子表单中看到的内容。以上是关于在新窗口中打开 Access 中的子表单的主要内容,如果未能解决你的问题,请参考以下文章
iPad Chrome - 在新窗口/选项卡中提交表单不起作用