从报告中检测调用 object

Detecting the invoking object from within a report

有什么方法可以从报表中检测到哪个表单调用了报表?

我有一个用于选择多个条件的表单,这些条件用于为各种报告构建 WhereCondition。在加载报告中,我测试了调用表单是否打开。如果它是打开的,我会抓取选择标准以在报告中显示 header。如果它没有打开,我会显示 "Species: All" 之类的东西,而不是 "Species: Blue-tailed damselfly" 之类的东西。这在这个特殊情况下工作正常,但感觉有点不稳定。我更想知道是什么调用了报告,以防将来在某些更复杂的系统中,可以从不同的地方调用报告。我知道 parent 表单可从子表单中获得,但这不适用于这种情况。

您有一个表单,用户可以在其中选择用于构建 WhereCondition 的条件,该条件用于过滤报告。不要要求报告 re-examine 表单标准,以便为自己生成适当的 header。在构建 WhereCondition 的相同表单过程中构建您的 header 字符串。然后在调用 OpenReport.

时将该字符串作为 OpenArgs 传递

例如,如果不限制物种:

strHeader = "Species: All"

或所选物种:

strHeader = "Species: Blue-tailed damselfly"

然后在打开报表时传入strHeader

DoCmd.OpenReport ReportName:="YourReport", _
    View:=acViewReport, _
    WhereCondition:=strWhere, _
    OpenArgs:=strHeader

并且在报告的加载事件中,您可以检查 OpenArgs 中是否有内容并使用它:

If Len(Me.OpenArgs) > 0 Then
    ' do what you want with it '
End If

这种方法使报告独立于任何特定的表格。如果您重命名当前窗体或为报表选择标准创建不同的窗体,该策略不会中断。

您甚至可以指定一个适当的 header 当报告标准预先标准化时。例如,标题为 "View Yesterday's Additions":

的命令按钮
strWhere = "[Date_Added] >= (Date() - 1) AND [Date_Added] < Date()"
strHeader = "Species Added Yesterday"
DoCmd.OpenReport ReportName:="YourReport", _
    View:=acViewReport, _
    WhereCondition:=strWhere, _
    OpenArgs:=strHeader