gpt4 book ai didi

vba - 如何在 VBA 中将 Variant 分配给 Variant?

转载 作者:行者123 更新时间:2023-12-03 22:19:23 24 4
gpt4 key购买 nike

(警告:虽然它乍一看可能是一个问题,但这是 而不是 一个初学者级别的问题。如果您熟悉“让强制”这个短语或者您曾经查看过 VBA 规范,请继续阅读。)

假设我有一个 Variant 类型的表达式,我想将它分配给一个变量。听起来很容易,对吧?

Dim v As Variant

v = SomeMethod() ' SomeMethod has return type Variant

不幸的是,如果 SomeMethod返回一个 Object(即 VarType 为 vbObject 的 Variant), Let coercion开始和 v包含对象的“简单数据值”。换句话说,如果 SomeMethod 返回一个对 TextBox 的引用, v将包含一个字符串。

显然,解决方案是使用 Set :
Dim v As Variant

Set v = SomeMethod()

不幸的是,如果 SomeMethod不返回对象,例如一个字符串,产生类型不匹配错误。

到目前为止,我找到的唯一解决方案是:
Dim v As Variant

If IsObject(SomeMethod()) Then
Set v = SomeMethod()
Else
v = SomeMethod()
End If

这有调用 SomeMethod 的不幸副作用两次。

是否有不需要调用 SomeMethod 的解决方案?两次?

最佳答案

Dim v As Variant
For Each v In Array(SomeMethod())
Exit For 'Needed for v to retain it's value
Next v
'Use v here - v is now holding a value or a reference

关于vba - 如何在 VBA 中将 Variant 分配给 Variant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35750449/

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