gpt4 book ai didi

vba - 函数调用位于赋值左侧的合法用例是什么?

转载 作者:行者123 更新时间:2023-12-04 20:17:56 24 4
gpt4 key购买 nike

VBA 编译错误如下:

Function call on left-hand side of assignment must return Variant or Object

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

如果我从函数签名中删除 As Integer 返回类型,我会得到一个返回隐式 Variant 的函数,并且编译器满意 - 但现在有一个运行时错误 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 上调用函数

编译错误的存在是有原因的,所以必须是一个有效的用例。这是什么?

最佳答案

如果函数要返回一个 Variant,并且该 Variant 包含一个 Object(即 Variant type 是 VT_DISPATCH),并且那个对象有一个默认的“property put”,那么赋值是有效的,并且赋值被设置为那个默认属性。

在所有其他情况下,它不是。

关于vba - 函数调用位于赋值左侧的合法用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44908473/

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