在新窗口中打开Access中的子窗体

时间:2017-06-02 16:11:51

标签: forms ms-access filter combobox subform

我有一个访问表单(“F_Filter”),其中我指示过滤数据的参数。 Form 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 个答案:

答案 0 :(得分:0)

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