我有一个带有子表单(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
我的问题是我在子表单上使用的快速过滤器并不适用于报告。
答案 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()
测试无法帮助您检测到它。