我创建了一个尝试返回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
Run Code Online (Sandbox Code Playgroud)
我尝试通过以下方式使用它:
Dim testSubForm As SubForm
testSubForm = mySubFrm("testForm", "testSubForm")
Run Code Online (Sandbox Code Playgroud)
立即出现编译错误:
无效使用财产
我试图做的是添加一个手表frm.Controls(subformName)
,我看到它的返回类型是SubForm/SubForm
,所以我觉得我正在声明并设置正确的数据类型,但我又不确定?
有人可以帮助我解决我做得不好的事情吗?
谢谢
我不太懂Access,但我很了解VBA。
您的函数返回一个对象引用:
Run Code Online (Sandbox Code Playgroud)Public Function mySubFrm(name As String, subformName As String) As SubForm
因此,必须使用Set
关键字指定其返回值:
Set mySubFrm = subFrm
Run Code Online (Sandbox Code Playgroud)
你之所以会遇到这个令人困惑的错误,是因为 VBA 中有一个可爱的(不是!)东西,称为默认属性。
看,表单有一个默认属性,很可能是它的Controls
集合 - 并且该属性仅公开Public Property Get
访问器,这使其成为只读。
所以当你省略Set
关键字时:
mySubFrm = subFrm
Run Code Online (Sandbox Code Playgroud)
VBA 假定代码是合法的,因此您可能想要做的唯一一件事就是分配该默认属性 - 换句话说,它的行为与您编写的完全一样:
mySubFrm.Controls = subFrm
Run Code Online (Sandbox Code Playgroud)
但是Controls
类自己的默认属性是它的Item
成员,它也是只读的:没有办法默认Controls
属性不可能出现在赋值的左侧。
因此,财产的无效使用。
我的开源项目Rubberduck很快就会进行检查,只要您隐式引用对象的默认属性,并提出显式调用,该检查就会发出结果。当您甚至不知道自己正在引用默认属性时,编写能够说明其作用并执行其说明的代码是很困难的。
归档时间: |
|
查看次数: |
849 次 |
最近记录: |