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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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_Ms Access_Vba - Fatal编程技术网

Ms access 使用子报告动态组合多个报告-MS Access

Ms access 使用子报告动态组合多个报告-MS Access,ms-access,vba,Ms Access,Vba,我正在尝试创建一个主报告,可用于将多个其他报告合并为一个。理想情况下,最终结果是单个PDF输出 我一直在尝试使用一个表来存储要填充到主报告中的报告的名称,并使用这些名称为加载的子报告定义SourceObject 理想情况下,我希望该选项具有可变数量的子报告,因此我一直在尝试使用分组函数来实现这一点。到目前为止,我得到的唯一结果是所有小组都有相同的报告。我尝试将以下代码放入OnLoad和OnCurrent——其中txtPageReport是存储报告名称的文本框 subReportName = Me

我正在尝试创建一个主报告,可用于将多个其他报告合并为一个。理想情况下,最终结果是单个PDF输出

我一直在尝试使用一个表来存储要填充到主报告中的报告的名称,并使用这些名称为加载的子报告定义SourceObject

理想情况下,我希望该选项具有可变数量的子报告,因此我一直在尝试使用分组函数来实现这一点。到目前为止,我得到的唯一结果是所有小组都有相同的报告。我尝试将以下代码放入
OnLoad
OnCurrent
——其中txtPageReport是存储报告名称的文本框

subReportName = Me.txtPageReport
Me.subReport.SourceObject = subReportName
如有任何建议,将不胜感激。也许我完全走错了方向


谢谢

考虑以下两个选项,它们不需要主报表动态调用子报表的表存储

分组报告

将所有子报告插入组标题部分(零长度详细信息部分)。然后,将每个子报表格式属性设置为
可以收缩=是
,并使用
强制新建页面=在节
之前按员工组对报表进行分页。现在,您可以在打印预览中打开报告,并使用功能区上的选项另存为PDF

非分组报告

将所有子报告插入详细信息部分(无分组)。然后,使用方法动态筛选报表。使用
Where条件
参数按EmployeeID筛选

下面是一个VBA循环,循环遍历所有员工,然后将每个员工的报告转换为PDF。代码可用于上述分组或非分组报告

Dim db as Database
Dim rst as Recordset
Dim strFile As String    

Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT EmployeeID FROM Employees", dbOpenDynaset)

Do While Not rst.EOF
    ' OPEN FILTERED REPORT IN PRINT PREVIEW '
    DoCmd.OpenReport "ReportName", acViewPreview, , "EmployeeID = " & rst!EmployeeID

    ' OUTPUT REPORT INTO PDF '
    strFile = "C:\Path\To\Output\Folder\Employee_" & rst!EmployeeID & ".pdf"
    DoCmd.OutputTo acOutputReport, "ReportName", acFormatPDF, strFile, False

    rst.MoveNext
Loop

rst.Close
Set rst = Nothing
Set db = Nothing

什么是报告的记录源查询/表?子报表与主报表之间的关系如何?请编辑详细信息。我几乎可以肯定,你可以以某种方式合并所有记录,只需使用分组。这些报告都是我工作的公司多个客户的员工相关数据。每个子报表都会为每个员工提供不同类别的数据—基本信息、薪酬、,等等。他们希望能够灵活地重新排列这些子报表,或不包括不适用于特定公司/员工的报表。子报表与其他控件一样,可以有条件地显示或不显示属性,并且具有
CanShrink
属性,如果相应的数据为空,则不会显示该属性。只需对员工的主报告进行分组,并将所有子报告移动到由
EmployeeID
链接的分组中。是的,但是我尝试为每个员工创建一个报告。一组员工没有一份报告。我的想法是,我可以为每个员工创建一个报告列表——每个员工的报告会有所不同。但是,当我尝试在“EmployeeReports”表(列出每个员工的报告)上分组时,我不会在每个子报告中得到不同的报告。同一份报告我重复了好几次,太棒了!谢谢你的详细回答。我会尝试一下,如果我有任何后续问题,请告诉你。快速问题-将子报告放在组标题中而不是第一个选项的详细信息部分的目的是什么?我在做的另一个问题-我希望在每个子报告之间有一个分页符。是否有办法调整您的上述建议以实现这一点?组页眉或页脚强制记录仅限于指定组id中的记录,此处为特定员工。如果你把子报告放得很详细-所有员工都会出现,你对此有意见。请参见第二个类型-详细信息(无分组)报告。因此,您需要过滤器。对于分页符,请尝试将子报表隔开,调整其高度以永不收缩,并在打印预览中不断检查调整。或者在组页眉和组页脚中放置耦合,并指定。