【发布时间】:2016-06-25 11:03:08
【问题描述】:
我创建了一个表单,希望为用户提供选项过滤报告。该表单具有用于选择选项的列表框、过滤器按钮和清除按钮。在表单的底部,我添加了子报表,以便它可以根据过滤条件进行更新。如何在代码中调出子报表以便过滤?如果我使用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
【问题讨论】:
-
您是否在设计视图中将报表对象拖到表单中?如果是这样,我认为您创建了一个子表单。
-
是的,当它处于设计视图时,我将报表拖到表单中。我应该用其他方式而不是 With Reports![List] 来称呼它吗?
-
另外,我修复了“输入参数”问题,但现在我遇到了另一个问题。代码将根据选择进行过滤并返回值。我遇到的问题是某些字段是空白的,因此它不会返回所有记录。有没有另一种方法让它返回所有记录而不是使用 If Len(strStatus) = 0 Then strStatus = "Like '*'"
-
我尝试使用以下方法,但它显示“对象不支持此属性或方法” With Forms!Filter![List] .Filter = strFilter .FilterOn = True End With
-
[List]仅当[List]直接打开时才可用作Reports![List],而不是包含在另一个表单或报表中时。