如何在VBA中将变体分配给变体?

Heinzi

(警告:虽然乍看起来似乎不是一个问题,但这不是初学者级的问题。如果您熟悉“让我们强制使用”一词,或者您曾经研究过VBA规范,请继续阅读。)

假设我有一个type的表达式Variant,我想将其分配给一个变量。听起来很简单,对吧?

Dim v As Variant

v = SomeMethod()    ' SomeMethod has return type Variant

不幸的是,如果SomeMethod返回一个对象(即VarType为vbObject的Variant),Let强制将插入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两次?

利维坦

在VBA中,将变量作为参数传递的唯一方法是将变量赋给不知道是对象还是基元的变量。

如果您无法重构代码,以将其v作为参数传递给Sub,Function或Let Property(尽管Let这也适用于对象),则可以始终v在模块范围内进行声明,并仅具有专用的Sub来保存-分配该变量:

Private v As Variant

Private Sub SetV(ByVal var As Variant)
    If IsObject(var) Then
        Set v = var
    Else
        v = var
    End If
End Sub

与其他地方打电话SetV SomeMethod()

不漂亮,但这是不打SomeMethod()两次电话或触摸其内部工作的唯一方法


编辑

好的,我仔细考虑了一下,我认为我找到了一个更好的解决方案,它更接近您的想法:

Public Sub LetSet(ByRef variable As Variant, ByVal value As Variant)
    If IsObject(value) Then
        Set variable = value
    Else
        variable = value
    End If
End Sub

[...]我想VBA中没有LetSet v = ...语句

现在有: LetSet v, SomeMethod()

您没有返回值,你需要LetSet取决于其类型的变量,而不是你传递需要在按住返回值作为第一个参数变量的引用,使得子可以改变它的价值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Excel VBA中将一个变体分配给另一个

来自分类Dev

如何在Java中将图像分配给JLabel?

来自分类Dev

如何在MATLAB中将指针分配给对象的属性?

来自分类Dev

如何在Spark中将分区分配给任务

来自分类Dev

如何在SwiftUI中将nil分配给绑定对象?

来自分类Dev

如何在JavaScript中将值从JSON分配给变量

来自分类Dev

如何在gsl集成中将结构分配给void

来自分类Dev

如何在blazor中将类属性分配给InputDate?

来自分类Dev

如何在C中将argv分配给指针变量?

来自分类Dev

如何在jQuery中将数组分配给变量

来自分类Dev

如何在bash中将函数的输出分配给变量?

来自分类Dev

如何在 Vim 中将 :ALELint 分配给 Ck?

来自分类Dev

如何在python中将None分配给对象引用

来自分类Dev

如何在反应中将 csv 数据分配给状态?

来自分类Dev

如何在Woocommerce中将属性设置为变体

来自分类Dev

如何在Woocommerce中将属性设置为变体

来自分类Dev

如何在Vim中将可视块选择分配给鼠标的中间按钮?

来自分类Dev

如何在Java中将负数作为二进制分配给int变量?

来自分类Dev

如何在javascript中将函数分配给对象方法?

来自分类Dev

如何在InitNode事件中将数据分配给VirtualStringTree的节点

来自分类Dev

如何在C中将字符值分配给整数类型变量?

来自分类Dev

如何在Struts 2中将s:date的输出分配给'var'(s:set)

来自分类Dev

如何在控制台和文档中将内置方法分配给javascript中的变量?

来自分类Dev

如何在大括号中将带有大括号的文本分配给变量

来自分类Dev

如何在Perl中将可变长度的行分配给变量?

来自分类Dev

如何在C ++中将std :: function分配给运算符?

来自分类Dev

如何在Ansible-Playbook中将数组分配给变量

来自分类Dev

如何在igraph中将不同的图像分配给不同的顶点?

来自分类Dev

如何在ssrs 2012中将范围分配给报表变量

Related 相关文章

  1. 1

    在Excel VBA中将一个变体分配给另一个

  2. 2

    如何在Java中将图像分配给JLabel?

  3. 3

    如何在MATLAB中将指针分配给对象的属性?

  4. 4

    如何在Spark中将分区分配给任务

  5. 5

    如何在SwiftUI中将nil分配给绑定对象?

  6. 6

    如何在JavaScript中将值从JSON分配给变量

  7. 7

    如何在gsl集成中将结构分配给void

  8. 8

    如何在blazor中将类属性分配给InputDate?

  9. 9

    如何在C中将argv分配给指针变量?

  10. 10

    如何在jQuery中将数组分配给变量

  11. 11

    如何在bash中将函数的输出分配给变量?

  12. 12

    如何在 Vim 中将 :ALELint 分配给 Ck?

  13. 13

    如何在python中将None分配给对象引用

  14. 14

    如何在反应中将 csv 数据分配给状态?

  15. 15

    如何在Woocommerce中将属性设置为变体

  16. 16

    如何在Woocommerce中将属性设置为变体

  17. 17

    如何在Vim中将可视块选择分配给鼠标的中间按钮?

  18. 18

    如何在Java中将负数作为二进制分配给int变量?

  19. 19

    如何在javascript中将函数分配给对象方法?

  20. 20

    如何在InitNode事件中将数据分配给VirtualStringTree的节点

  21. 21

    如何在C中将字符值分配给整数类型变量?

  22. 22

    如何在Struts 2中将s:date的输出分配给'var'(s:set)

  23. 23

    如何在控制台和文档中将内置方法分配给javascript中的变量?

  24. 24

    如何在大括号中将带有大括号的文本分配给变量

  25. 25

    如何在Perl中将可变长度的行分配给变量?

  26. 26

    如何在C ++中将std :: function分配给运算符?

  27. 27

    如何在Ansible-Playbook中将数组分配给变量

  28. 28

    如何在igraph中将不同的图像分配给不同的顶点?

  29. 29

    如何在ssrs 2012中将范围分配给报表变量

热门标签

归档