我创建了一个表单,希望为用户提供筛选报告的选项。表单中有用于选择选项的列表框,一个过滤按钮和一个清除按钮。在表单的底部,我添加了子报表,以便它可以根据过滤条件进行更新。如何在代码中调出子报表以便过滤?如果我直接在Report![List]
的报表上执行此操作,但它不会在窗体子报表上更新。我也没有在过滤时显示所有记录,因为由于If Len(strSubsystem) = 0 Then strSubsystem = "Like '*'"
语句而不会出现具有空白的两个标准之一的记录。除了"like '*'"
之外,我还可以使用另一个声明来显示所有记录。
这是代码
Private Sub cmdApplyFilter_Click()
Dim varItem As Variant
Dim strSubsystem As String
Dim strStatus As String
Dim strFilter As String
' Build criteria string from subsystem listbox
For Each varItem In Me.lstSubsystems.ItemsSelected
strSubsystem = strSubsystem & ",'" & Me.lstSubsystems.ItemData(varItem) _
& "'"
Next varItem
If Len(strSubsystem) = 0 Then
strSubsystem = "Like '*'"
Else
strSubsystem = Right(strSubsystem, Len(strSubsystem) - 1)
strSubsystem = "IN(" & strSubsystem & ")"
End If
' Build criteria string from status listbox
For Each varItem In Me.lstStatus.ItemsSelected
strStatus = strStatus & ",'" & Me.lstStatus.ItemData(varItem) _
& "'"
Next varItem
If Len(strStatus) = 0 Then
strStatus = "Like '*'"
Else
strStatus = Right(strStatus, Len(strStatus) - 1)
strStatus = "IN(" & strStatus & ")"
End If
' Build filter string
strFilter = "[Subsystem] " & strSubsystem & _
" AND [Status] " & strStatus
' Apply the filter and switch it on
With Forms![Filter]
.Filter = strFilter
.FilterOn = True
End With
End Sub
答案 0 :(得分:1)
如果报表是作为子表单嵌入的,并且在主表单打开时总是出现,则不需要检查报表是否打开。打开父窗体时子窗体会自动打开,因此除非有关闭它的内容,否则您不需要检查。引用子表单时,您应该使用[Forms]!
集合,而不是[Reports]!
集合。查看this page以获取有关引用子表单对象的帮助。
我对表单的结构并不完全清楚,但引用可能是:
[Forms]![Filter]!SubFormControlNameHere.Report.Filter
答案 1 :(得分:0)
您需要做的第一件事是找到包含报告的子窗体控件的名称。如果在表单位于设计视图中时难以找到该名称,请从“立即”窗口中检查表单的控件。 ( Ctrl + g 将带您进入立即窗口。)
这是我的表格的一个例子......
for each ctl in Forms!Form10.controls : ? ctl.name, TypeName(ctl) : next
subReport SubForm
Label0 Label
txtSort TextBox
Label2 Label
所以我的子窗体控件名为 subReport 。
我拥有该名称后,可以将表单切换回表单视图,并使用子表单控件中包含的Filter
的{{1}}属性...
Report
立即过滤报告以仅显示一个匹配的行。
之后,我关闭了过滤器,但报告显示没有改变,直到我调用Forms!Form10!subReport.Report.filter = "id=5"
Forms!Form10!subReport.Report.filteron = true
(在子窗体控件上)...
Requery
如果我想从父窗体上包含的命令按钮的click事件进行过滤,我可以快捷方式控制名称......
Forms!Form10!subReport.Report.filteron = false
Forms!Form10!subReport.requery