VBA中存在编译错误,如下所示:
编译错误:
赋值左侧的函数调用必须返回Variant或Object。
要产生此编译错误,您只需要一个函数:
Public Function Foo(ByVal x As Integer) As Integer
Foo = x
End Function
..然后在作业左侧的函数调用 - 例如:
Public Sub Test()
Foo(42) = 12
End Sub
如果我从函数签名中删除As Integer
返回类型,我会得到一个返回隐式Variant
的函数,并且编译器满意 - 但现在有了#sa; sa运行时错误424 /"对象必需"。
所以我让函数返回一个实际的对象:
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上使用函数调用的有效,合法(并且有理由?)。
由于某种原因存在编译错误,因此必须才是有效的用例。它是什么?
答案 0 :(得分:4)
如果该函数要返回Variant
,并且Variant
包含Object
(即Variant
类型为VT_DISPATCH),和该对象具有默认"属性put",则赋值有效,并且赋值设置为该默认属性。
在所有其他情况下,它不是。
答案 1 :(得分:1)
VB变体类似于C#中的dynamic,这意味着该类型在运行时动态解析。因此,您可以为变量类型赋值(即返回变量类型的函数的返回值)是有意义的。
我认为用例非常狭窄,99.9%的时间,如果你试图这样做,你做错了。