有一个在VBA编译错误内容如下:函数调用位于赋值左侧的合法用例是什么?
Compile error:
Function call on left-hand side of assignment must return Variant or Object.
为了产生这种编译错误,你只需要一个功能:
Public Function Foo(ByVal x As Integer) As Integer
Foo = x
End Function
..和那么功能在转让的左侧拨打- 例如:
Public Sub Test()
Foo(42) = 12
End Sub
如果我从函数的签名中删除了返回类型,我得到一个函数返回一个隐含的Variant
,并且编译器得到满足 - 但现在有一个运行时错误424 /“Object Required”。
所以我做的函数返回一个实际的对象:在运行时
Public Function Foo(ByVal x As Integer) As Object
Dim result As Collection
Set result = New Collection
result.Add x
Set Foo = result
End Function
Public Sub Test()
Foo(42) = 12
End Sub
现在的错误是438 /“对象不支持此属性或方法” - 显然,这Test
方法不做任何感觉。
我不能为了我的生活而想到任何对于任务的LHS函数调用函数调用的任何有效的,合法的(和保证的)使用。
该编译错误存在的原因,所以必须是一个有效的用例。它是什么?
好了,人们可以有一个返回值,比如函数,'Range'(如在Excel VBA),然后一个可以做'MyFunction的(富)= “你好”'和会隐含地与'MyFunction(foo).Value =“hi there”一样 - 换句话说,任务的LHS上的任何*合法*函数调用将分配给返回对象的默认属性,并丢弃/离开对象参考摇摆不定。正确? –
@ Mat'sMug:是的,那将是一个例子。它有用吗? – Bathsheba
是的,它的工作原理。我认为这为一些“丢弃的对象引用”[Rubberduck](http://www.github.com/rubberduck-vba/Rubberduck)检查=) –