Invalid reference to Form property of subform (ms Access 2007)
Asked Answered
C

1

3

I'm using a technique similar to that in Remou's answer to this question to manipulate the propeties of the controls on a subform. Works great as long as the parent form's recordset has at least one record. If the parent form has no records, I get:

Error 2455, "You entered an expression that has an invalid reference to the property Form/Report."

The error is thrown when I attempt the recursive call. A simplified version of the code is below (I've stripped out error handling & a couple more Cases, including an Else). This code lives in a Module and is called from the Load event of most forms in my application:

Public Sub LockUnlockForm(frmLoad As Form)

Dim ctl As Control

    For Each ctl In frmLoad.Controls
        With ctl
            Select Case .ControlType
                Case acTextBox, acComboBox, acCheckBox
                    .Locked = Not gblnAuthorized
                Case acSubform
                    LockUnlockForm .Form  '<--- this line errors
            End Select
        End With
    Next

End Sub

What I want to do on the form that's giving me the problem right now is to create a new record at the parent level and allow the user to add data to the subform (if gblnAuthorized is True, or set a simple message if it's False). Do I have no choice but to do that before calling LockUnlockForm? Will creating a new parent-form-level record even work to prevent this error?

Cohbert answered 16/2, 2011 at 23:52 Comment(5)
I have just tested with a parent form with no records, and it worked fine for me. I suspect that something else is happening that is interfering with the above code. What runs in your code if there are no records?Kirovabad
@Remou: On button click in other form, it loads this form using the WhereCondition parameter of DoCmd.OpenForm. This code (in module) runs as first call from Form_Load. If this form has records, I'm golden, but if it has none I get indicated error & no controls show in Detail section. Testing for RecordCount=0 & skipping the call is working.Cohbert
Controls bound to the recordsource of the parent form (including subforms with LinkChild/LinkMaster properties) do not load when there are no records.Kerekes
@Kerekes That's it! Thanks. I knew there was something but could not remember, all that was left in my head was the problem with setting visibility :(Kirovabad
@David-W-Fenton: I don't think that's quite right--or at least, the subform control is still part of the Controls collection, even if its form isn't loaded. Otherwise the Case wouldn't attempt the recursive call. Close enough for going on with, though.Cohbert
L
13

Determine the record count for the form's recordset and only run the For Each loop when the record count > 0.

I'm answering this so other users with the same problem can easily determine the answer that was provided. And it's gone a month stale. Pass the credit to HansUp if you can!

Limicoline answered 24/3, 2011 at 18:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.