访问:请参阅主报告

时间:2015-08-13 13:14:29

标签: ms-access ms-access-2007

我可以使用[subreportName].[Report].[textBoxName]成功引用子报告页脚中文本框中的值。但是,我想参考详细信息部分中的文本框。使用上面的内容只是给出它包含的最后一个值 - 我想引用一个特定的值(比如字段)。

这可能,还是有一些解决方法?

更新:这是我到目前为止所拥有的。 fieldA是我要用来挑选正确条目的文本框的名称(正确的条目在此文本框中将包含“keyString”),fieldB包含我想要的值实际上存储。

在子报告详细信息部分的OnFormat事件中:

Dim varToStore As Double
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
    If Me![fieldA] = "keyString" Then
        varToStore = Me![fieldB]
    End If
End Sub

在新模块中:

Function getVariable(Name As String)
    If Name = "varToStore" Then
        getVariable = varToStore
    Else
        getVariable = -1
    End If
End Function

在主报告中的文本框的控制源中:

=getVariable("varToStore")

我正在使用通用函数getVariable,因为我计划存储的详细信息部分中有一些变量,所以我认为将参数传递给一个函数会更容易,而不是有一个函数每个

2 个答案:

答案 0 :(得分:1)

如果查看连续表单的详细信息部分中的文本框,它实际上只是一个对象,即使屏幕上有很多行。 如果更改属性,则更改所有行。如果您读取其值,则会获得当前记录的值。

通过报告的详细信息部分,它是类似的。除了打印后的最后一行,你不能引用任何行的文本框。

但您可以正在打印。详细信息部分的OnFormat属性很可能是最佳使用事件。

这样的东西
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)

    If Me!Keyfield = 4711 Then
        ' do something specific with the textbox of this specific row
    End If

End Sub

要创建此子程序,请打开子报表的详细信息部分的属性表 在“事件”标签上,为格式化事件选择事件过程。编辑它(" ..."按钮),你就在那里。

您可以将文本框值分配给公共变量,以将其传递给主报表。但是,根据您想要使用它的主报告中的位置/时间,可能为时已晚。

答案 1 :(得分:1)

更新的新答案。

我认为你的代码不起作用? 这是因为在打开主报表时会评估getVariable("varToStore"),但在格式化子报表时会设置varToStore

所以你需要一个不同的方法。不要尝试从子报表中获取数据,在打开主报表时使用SQL获取数据。类似的东西:

Report_Open()
Me.mainTextField.Value = DLookup("fieldB", "SubReportTable", "fieldA = 'keyString'")
那时

mainTextField将不受约束 如果" keyString"实际上是不变的,你甚至可以使用DLookup作为控制源。但我想这是一个变量,因此在VBA中构建DLookup调用更容易。