MS Access - 快速过滤子表单,然后将过滤器传递给报表

时间:2015-01-21 22:35:48

标签: vba ms-access filter report subform

我有一个带有子表单(frmDocumentDatasheet)的表单(frmDocumentList)和一个打开报表的打印按钮(rptDocumentList)。

我想要做的就是使用"快速过滤功能" (子类型上的sort& filter-ribbon)。然后将过滤后的数据传递给报告。

目前报告收集了所有数据。

我认为这是一个简单的问题,但我不可能解决它。我有vba的经验。 希望有人可以帮助我。 - 对我的英语不好 -

这是我试过的vba:

 Private Sub Command17_Click()

If Not IsNull(Me.Form![Document Datasheet].[Filter]) Then
    DoCmd.OpenReport "RptDocumentList", A_PREVIEW, , Me.Form![Document Datasheet].Filter
Else
    MsgBox "Apply a filter to the form first"
End If
End Sub

我的问题是我在子表单上使用的快速过滤器并不适用于报告。

1 个答案:

答案 0 :(得分:1)

如果您的命令按钮位于主窗体上,那么您需要一个不同的过滤器:您需要子窗体上的过滤器。类似的东西:

Option Explicit  ' <- be sure this is at top of module
                 ' ...and run Debug>Compile so it can perform its check

'' And on your button click event:
Private Sub Command17_Click()
    Dim strFilter as String
    strFilter = Me.Form![Document Datasheet].[Filter]
    Debug.Print strFilter
    If strFilter <> "" Then
        DoCmd.OpenReport "RptDocumentList", A_PREVIEW, , strFilter
    Else
        MsgBox "Apply a filter to the form first"
    End If
End Sub

只需引用子窗体的名称 - 即它在主窗体上看到的控件名称。更多here

使用像strFilter这样的变量有望为您提供更多控制,以便您可以看到发生了什么(或不发生)。

Debug.Print命令会使您的过滤器字符串出现在立即窗口中。如果您对此不熟悉,我建议您做一些研究,因为它无疑会对您有所帮助。首先,你可以发布输出 - 也许你的字符串在某种程度上是问题。

您会注意到我的代码测试空字符串("")。可能您的过滤器是一个空字符串,IsNull()测试无法帮助您检测到它。