For loop 如何使用OpenArgs在循环情况下打印多个报告?

For loop 如何使用OpenArgs在循环情况下打印多个报告?,for-loop,ms-access,vba,ms-access-2007,openargs,For Loop,Ms Access,Vba,Ms Access 2007,Openargs,我正在精简数据库,尽可能消除重复报告,并创建更好的代码。我有一个数据库,涉及我们的焊工和工头。在这段代码中,我可以为单个工头打印一份报告,该报告通过openargs发送字符串“strActive”。报告查看strActive,并在OpenForm操作中,根据传递的字符串值设置活动、非活动或所有焊工的过滤器 它一次只对一页代码工作。在那里,用户从列表中选择一个领班或输入领班的时钟号码。报告所基于的查询使用全局字符串“ForemanCLK”仅获取该焊工的结果 以前,我有三份报告;一个适用于所有焊工,

我正在精简数据库,尽可能消除重复报告,并创建更好的代码。我有一个数据库,涉及我们的焊工和工头。在这段代码中,我可以为单个工头打印一份报告,该报告通过openargs发送字符串“strActive”。报告查看strActive,并在OpenForm操作中,根据传递的字符串值设置活动、非活动或所有焊工的过滤器

它一次只对一页代码工作。在那里,用户从列表中选择一个领班或输入领班的时钟号码。报告所基于的查询使用全局字符串“ForemanCLK”仅获取该焊工的结果

以前,我有三份报告;一个适用于所有焊工,一个适用于在职焊工,一个适用于非在职焊工

以前,我会基于strActive设置一个变量,并使用代码中的另一个变量(而不是报表名称)打开相应的报表。循环运行良好,打开报告39次,每次都有一个新的领班姓名和数据

我很困惑,为什么现在用openarg打开报告不起作用。我只知道第一个工头的名字,39次。通过注释docmd行和debug.print(打印)表单所需的各种值,我已经验证了我得到了不同foremanCLK的foremanCLK变量。报告根本无法正确加载

Set rec = CurrentDb.OpenRecordset(sql)

    rec.MoveFirst

    For ctr = 0 To rec.RecordCount - 1
        ForemanCLK = rec(0).Value
        DoCmd.OpenReport "rptForeman", acViewNormal, , , , strActive
        'DoCmd.OpenReport "rptForeman", acViewNormal
    rec.MoveNext

    Next
上面的代码让我得到了Strative过滤的同一个工头报告的多份副本

    For ctr = 0 To rec.RecordCount - 1
        ForemanCLK = rec(0).Value
        'DoCmd.OpenReport "rptForeman", acViewNormal, , , , strActive
        DoCmd.OpenReport "rptForeman", acViewNormal
    rec.MoveNext
但这让我有了所有不同的工头,除了没有过滤

我试着加入Where子句

acViewNormal, ,"[active]=" & True

我对单个报告进行了相同的验证,它可以正确过滤,但在循环中,它根本不过滤。然而,它确实给了我不同的工头

这里的大问题是……

为什么??access是否在报告之间没有足够的时间来关闭它,因此它不会对打开的事件执行操作


还有其他想法吗

必须在循环中明确关闭报告:
DoCmd.close acReport,“rptForeman”
。如果在已打开的报表上再次调用OpenReport,该对象将在access中获得焦点,但不会重新运行打开事件。

好的,我必须羞愧地低下头

我用除strActive之外的所有变量检查了上面的代码

当我把它添加到debug.print行时,它什么也没有出现。这怎么可能

我只是忘了在sub的开头设置它,就像我在打开单个报告的其他操作中所做的那样。strActive是一个全局变量,但在此之前未在代码中的任何其他点进行设置


一旦将其添加到sub的开头,所有操作都正常

我从未使用过上面的代码,在一个循环中生成多个报告也没有问题,使用acViewNormal时,即使上面的代码(减去OpenArgs的代码)也会生成多个名称不同的报告,每次都从查询中获取数据。似乎只有过滤器才是问题的根源。但是,我喜欢在使用acViewReport时使用此代码,以便在报告失去焦点或其他错误捕获时能够关闭报告。谢谢
acViewNormal, ,"[active]=" & False
acViewNormal, ,"[active]=" & True & " OR [active]=" & False