Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 过滤报告_Ms Access_Vba - Fatal编程技术网

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