从报告中检测调用对象

问题描述 投票:1回答:1

我是否可以通过某种方式从报告中检测出哪种形式调用了报告?

我有一个表格,用于选择几个标准,用于为各种报告构建WhereCondition。在On Load报告中,我测试打开的调用表单。如果它是打开的,我会抓住报告标题中显示的选择条件。如果它没有打开,我会显示“物种:全部”之类的东西,而不是例如“物种:蓝尾豆娘”。在这种特殊情况下工作正常,但感觉有点不稳定。我更愿意知道调用报告的是什么,如果在将来更复杂的系统中,可以从不同的地方调用报告。我知道父表单可以从子表单中获得,但在这种情况下不适用。

access-vba ms-access-2016
1个回答
1
投票

您有一个表单,用户可以选择用于构建WhereCondition的条件,该条件用于过滤报表。不要求报告重新检查表单标准,以便为自己生成适当的标题。在构建WhereCondition的相同表单过程中构建标题字符串。然后在调用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

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

当报告标准提前标准化时,您甚至可以指定适当的标题。例如,一个命令按钮标题为“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
© www.soinside.com 2019 - 2024. All rights reserved.