Search code examples
ms-accessms-access-2007

Access: Refer to text box from detail section of subreport from main report


I can successfully refer to the value in a text box in the subreport footer using [subreportName].[Report].[textBoxName]. However, I would like to refer to a text box in the detail section. Using the above just gives the last value it contained - I would like to refer to a specific one (by field, say).

Is this possible, or is there some workaround?


Update: This is what I have so far. fieldA is the name of the text box that I want to use to pick out the correct entry (the correct entry will have "keyString" in this text box), and fieldB contains the value I want to actually store.

In the OnFormat event in the subreport detail section:

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

In a new Module:

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

In the Control Source of the text box in the main report:

=getVariable("varToStore")

I'm using the general function getVariable since there are a few variables from the detail section that I'm planning to store, so I thought it would be easier to just pass arguments to one function, rather than having a function for each.


Solution

  • If you look at a textbox in the detail section of a continuous form, it is really only one object, even if there are many rows on the screen. If you change a property, you change all rows. If you read its value, you get the value of the current record.

    With the detail section of a report, it's similar. You can't refer to the textbox of any row except the last after it has been printed.

    But you can while it is being printed. The OnFormat property of the detail section is most probably the best event to use.

    Something like

    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
    

    To create this sub, open the property sheet of the details section of the subreport.
    On the Events tab, select Event procedure for the On Format event. Edit it ("..." button) and you're there.

    You can assign the textbox value to a public variable to pass it to the main report. But depending on where/when in the main report you want to use it, it may be too late.