gpt4 book ai didi

ms-access - 从 VBA Access 中的函数返回数据类型时收到 'Invalid Use of Property' 错误?

转载 作者:行者123 更新时间:2023-12-05 09:16:56 25 4
gpt4 key购买 nike

我创建了一个尝试返回 SubForm 数据类型的函数。此函数由各种父 Forms 使用。

函数如下所示:

Public Function mySubFrm(name As String, subformName As String) As SubForm

Dim frm As Form
Dim subFrm As SubForm

Set frm = Forms(name)
Set subFrm = frm.Controls(subformName)

mySubFrm = subFrm

End Function

我尝试通过以下方式使用它:

Dim testSubForm As SubForm

testSubForm = mySubFrm("testForm", "testSubForm")

紧随其后的是编译错误:

Invalid use of property

我试图做的是在 frm.Controls(subformName) 处添加一个 watch ,我看到它的返回类型是 SubForm/SubForm,所以我觉得尽管我声明并设置了正确的数据类型,但我还是不确定?

有人可以帮助我解决我做的不正确的事情吗?

谢谢

最佳答案

我不太懂Access,但我很懂VBA。

您的函数正在返回一个对象引用:

Public Function mySubFrm(name As String, subformName As String) As SubForm

因此,它的返回值必须使用Set关键字赋值:

Set mySubFrm = subFrm

之所以会出现这个令人困惑的错误,是因为 VBA 中有一个可爱的(不是!)东西,叫做默认属性

看,表单有一个默认属性,很可能是它的Controls 集合——并且该属性只公开一个Public Property Get Access 器, 这使它成为只读的。

因此,当您省略 Set 关键字时:

mySubFrm = subFrm

VBA 假定代码是合法的,因此您唯一可能想要做的就是分配该默认属性 - 换句话说,它的行为就像您编写的一样:

mySubFrm.Controls = subFrm

但是 Controls 类自己的默认属性是它的 Item 成员,它也是只读的:默认的 Controls 是不可能的属性可以出现在赋值的左侧。

因此,属性(property)使用无效

我的开源项目 Rubberduck很快就会有一个检查,只要你隐式引用一个对象的默认属性,就会发出一个结果,提供显式调用。当您甚至不知道自己指的是默认属性时,编写说到做到、做到言出必行的代码是很困难的。

关于ms-access - 从 VBA Access 中的函数返回数据类型时收到 'Invalid Use of Property' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49287399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com