Ms access 过滤报告
我创建了一个表单,希望给用户一个过滤报告的选项。表单具有用于选择选项的列表框、筛选按钮和清除按钮。在表单的底部,我添加了子报表,以便它可以根据筛选条件进行更新。如何在代码中调用子报表以使其过滤?如果我直接在报告上使用Ms access 过滤报告,ms-access,vba,Ms Access,Vba,我创建了一个表单,希望给用户一个过滤报告的选项。表单具有用于选择选项的列表框、筛选按钮和清除按钮。在表单的底部,我添加了子报表,以便它可以根据筛选条件进行更新。如何在代码中调用子报表以使其过滤?如果我直接在报告上使用报告,它就会工作![列表]但它不会在表单子报表中更新。我也没有得到过滤时显示的所有记录,因为如果Len(strSubsystem)=0,则strSubsystem=“Like'*'”语句导致两个条件之一为空的记录不会出现。除了像“*”这样的“代码”之外,我还可以使用其他语句来显示所有
报告,它就会工作![列表]
但它不会在表单子报表中更新。我也没有得到过滤时显示的所有记录,因为如果Len(strSubsystem)=0,则strSubsystem=“Like'*'”语句导致两个条件之一为空的记录不会出现。除了像“*”这样的“代码”之外,我还可以使用其他语句来显示所有记录
这是密码
Private-Sub-cmdApplyFilter\u-Click()
作为变体的Dim varItem
作为字符串的Dim strSubsystem
作为字符串的Dim strStatus
作为字符串的Dim strFilter
'从子系统列表框生成条件字符串
对于Me.lstsubsystem.items中的每个变量,已选择
strSubsystem=strSubsystem&“,”&Me.lstsubsystem.ItemData(变量项)_
& "'"
下一个变量
如果Len(strSubsystem)=0,则
strSubsystem=“像'*'”
其他的
strSubsystem=Right(strSubsystem,Len(strSubsystem)-1)
strSubsystem=“在(“&strSubsystem&”)中
如果结束
'从状态列表框生成条件字符串
对于Me.lstStatus.items中的每个变量,已选择
strStatus=strStatus&“,”&Me.lstStatus.ItemData(变量项)_
& "'"
下一个变量
如果Len(strStatus)=0,则
strStatus=“像'*'”
其他的
strStatus=右(strStatus,Len(strStatus)-1)
strStatus=“IN(“&strStatus&”)
如果结束
'生成筛选器字符串
strFilter=“[Subsystem]”和strSubsystem&_
“和[状态]”&strStatus
'应用过滤器并将其打开
用表格![过滤器]
.Filter=strFilter
.FilterOn=True
以
端接头
如果报表作为子表单嵌入,并且总是在主表单打开时显示,则不需要检查报表是否打开。当父窗体打开时,子窗体将自动打开,因此,除非有什么东西正在关闭它,否则不需要检查。引用子表单时,应使用[Forms]代码>集合,而不是[报告]代码>集合。查看有关引用子窗体对象的帮助
我不完全清楚您表格的结构,但参考可能是:
[Forms]![Filter]!SubFormControlNameHere.Report.Filter
您需要做的第一件事是查找包含报表的子窗体控件的名称。如果在窗体处于“设计”视图中时很难找到该名称,请从即时窗口检查窗体的控件。(Ctrl+g将带您进入即时窗口。)
这是我的表格的一个例子
用于表单中的每个ctl!表格10.控制:?ctl.name,TypeName(ctl):下一个
子报表子窗体
Label0标签
txtSort文本框
标签2标签
因此,我的子窗体控件名为subReport
获得该名称后,我可以将表单切换回表单视图,并使用子表单控件中包含的报表的过滤器属性
表单!表格10!subReport.Report.filter=“id=5”
形式!表格10!subReport.Report.filteron=true
报告立即被过滤,只显示一个匹配的行
之后,我关闭了过滤器,但直到我调用了Requery
(在子窗体控件上)之后,报告显示才改变
表单!表格10!subReport.Report.filteron=false
形式!表格10!子报表.重新查询
如果我想从父窗体中包含的命令按钮的单击事件中进行筛选,我可以使用控件名的快捷方式
Private-Sub-cmdApplyFilter\u-Click()
我subReport.Report.Filter=“id=1”
我subReport.Report.FilterOn=True
是否在“设计”视图中将报表对象拖到表单中?如果是,我认为您创建了一个子表单。是的,我在设计视图中将报表拖到表单中。我应该用另一种方式来称呼它,而不是用报告![列表]?此外,我修复了“输入参数”问题,但现在我有另一个问题。代码将根据选择进行过滤并返回值。我的问题是有些字段是空的,所以它不会返回所有记录。如果Len(strStatus)=0,那么strStatus=“Like'*'”我尝试使用下面的方法,但它在表单中表示“对象不支持此属性或方法”!过滤器![List].Filter=strFilter.FilterOn=True结束于[List]
仅在报告中可用![列表]
当直接打开[列表]
时,而不是当它包含在其他表单或报表中时。感谢您的回答。列表报告所在的表单名称为过滤器。我使用了“Forms![Filter]”,它不会根据标准更新表单上的报告。如何指定子报表?我感谢你的帮助。。。我对VBA不太了解最后一件事是,包含过滤器参数的框没有空白选项。所以当它过滤时,它不会显示所有的记录。空白处没有出现。我之所以相信它,是因为过滤器选项中没有blank。如果没有选择任何内容,则会显示所有记录,是否还有其他语句可以使用?感谢您的帮助当Len(strStatus)=0
时,请将其从过滤器中删除。在这种情况下,只需使用以下命令:strFilter=“[Subsystem]”和strSubsystem