MS Access——在子表单上快速过滤,然后将过滤器传递给报表
MS Access -- quick filter on a subform, then pass the filter to a report
我有一个带有子表单 (frmDocumentDatasheet) 的表单 (frmDocumentList) 和一个打开报告 (rptDocumentList) 的打印按钮。
我只想在子表单上使用 "quick filter function"(排序和筛选功能区)。然后将过滤后的数据传递给报表。
目前报告包含所有数据。
我认为这是一个简单的问题,但我的atm 无法解决它。我有 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
我的问题是我在子表单上使用的快速过滤器不适用于报表。
如果您的命令按钮在主窗体上,那么您需要一个不同的过滤器:您需要子窗体上的过滤器。类似于:
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
命令会导致您的过滤器字符串出现在立即 window 中。如果您对此不熟悉,我建议您做一些研究,因为它无疑会对您有所帮助。一方面,您可以 post 输出——也许是您的字符串出了问题。
您会注意到我的代码测试了一个空字符串 (""
)。可能您的过滤器是空字符串,IsNull()
测试无法帮助您检测到这一点。
我有一个带有子表单 (frmDocumentDatasheet) 的表单 (frmDocumentList) 和一个打开报告 (rptDocumentList) 的打印按钮。
我只想在子表单上使用 "quick filter function"(排序和筛选功能区)。然后将过滤后的数据传递给报表。
目前报告包含所有数据。
我认为这是一个简单的问题,但我的atm 无法解决它。我有 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
我的问题是我在子表单上使用的快速过滤器不适用于报表。
如果您的命令按钮在主窗体上,那么您需要一个不同的过滤器:您需要子窗体上的过滤器。类似于:
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
命令会导致您的过滤器字符串出现在立即 window 中。如果您对此不熟悉,我建议您做一些研究,因为它无疑会对您有所帮助。一方面,您可以 post 输出——也许是您的字符串出了问题。
您会注意到我的代码测试了一个空字符串 (""
)。可能您的过滤器是空字符串,IsNull()
测试无法帮助您检测到这一点。