昨天,一段对我很有效的表格/子表格突然开始投掷Error 2455: You entered an expression that has an invalid reference to the property Form/Report.
以下是我对问题的诊断。感觉就像一个bug。
我的问题是:有没有人见过这个?如果您有兴趣,可以尝试复制问题,让我知道你发现了什么吗?
问题:
我的解决方法:始终确保至少部分表单的“详细信息”部分在SubForm控件中可见。之一:
你可以复制一下吗?这很奇怪,所以我想要一些独立确认这个问题。所以,如果你有一点时间,请尝试以下步骤:
我的'孙子'表单在加载时没有RecordSource。在父/子表单加载后,记录源在代码中设置。
请指出您正在运行的Access版本以及获得的结果。我正在运行Access版本14.0.7128.5000,这似乎是最新的。
答案 0 :(得分:2)
尽管这是一个老线程并且OP的答案肯定是其他的东西,但我希望它能帮助为那些陷入困境的其他人提供一些启示“错误2455:你输入了一个表达式对表格/报告的无效引用“。这可能相当混乱,并且远离错误的实际原因。
今天发生在Access 2016上。在对项目进行一些更改时,其中一个表单突然在其包含一行代码的Form_Load()事件中抛出了错误2455:
Private Sub Form_Load()
Set mevtReferenceToSubform = Me.frmASubform.Form
End Sub
正如stackoverflow.com/questions/5023631/...在对该问题的评论中所指出的那样:
“当没有记录时,不会加载绑定到父表单的记录源的控件(包括具有LinkChild / LinkMaster属性的子表单)。”
显然,对于未绑定的子表单也是如此。如果父窗体的RecordSource查询没有返回任何记录,则子窗体'.Form'属性将无法从其父窗体访问!
在我的情况下,罪魁祸首证明是一个TempVar声明,我已经用代码中的其他解决方案替换了它。但是没注意到删除的TempVar甚至被现在失败的父表单的查询使用了,它没有返回任何结果......
答案 1 :(得分:1)
我认为这与Form的CurrentView属性有关。我有一个类似的案例,当Form的CurrentView为1(" Form" view)时,我只是避免了这种情况。这个解决方案对我有用:
If Me.CurrentView <> 1 Then
Me.sfrWPCN.Form.RecordSource = strSQL
End If
答案 2 :(得分:1)
我采用的解决方案是使用表单计时器,以确保首先加载报告和子报告。我正在修改子报告的过滤器,并在添加计时器之前收到 2455 错误。
答案 3 :(得分:0)
我知道这个问题很旧,但是我可以通过确保表单的Detail
属性设置为True
来解决此问题。我有一个If
语句正在检查条件:
If Me.Detail.Visible = False Then Me.Detail.Visible = True.