【问题标题】:VBA Array of variant type as class property变体类型的 VBA 数组作为类属性
【发布时间】:2011-07-17 14:13:24
【问题描述】:

我有一个类可以处理多个数字数组(双精度类型),还需要处理描述符数组,其中包括字符串和整数的混合,需要相应地用作字符串和数字。所以我决定创建一个变体类型的数组属性(不是包含数组的变体)。但是这个似乎不起作用,而类型 double 数组则起作用。

具体来说,这种类型的双数组属性工作正常,一次接收或返回一个数组:

Private p_dbNumericArray() As Double

Public Property Let NumericArray(Value() As Double)
    p_dbNumericArray() = Value()
End Property
Public Property Get NumericArray() As Double()
    NumericArray() = p_dbNumericArray()
End Property

但是当我尝试使用变体类型数组的相同模式时,Get 属性返回一个空/未分配的变体数组:

Private p_vaVariantArray() As Variant

Public Property Let VariantArray(Value() As Variant)
    p_vaVariantArray() = Value()
End Property
Public Property Get VariantArray() As Variant()
    VariantArray() = p_vaVariantArray()
End Property

将数组包装在变体中(而不是具有变体类型的数组)当然可以正常工作:

Private p_vaVariantArray As Variant

Public Property Let VariantArray(Value As Variant)
    p_vaVariantArray = Value
End Property
Public Property Get VariantArray() As Variant
    VariantArray = p_vaVariantArray
End Property

但是,在属性中适用于 Dim D() As Double 的模式不适用于 Dim V() As Variant 的已知和标准吗?

【问题讨论】:

    标签: arrays vba properties variant


    【解决方案1】:
    Public Property Get VariantArray() As Variant()
        VariantArray = p_vaVariantArray()
    End Property
    

    注意缺少的括号。

    【讨论】:

    • 嘎——又一个简单的!谢谢。 Double 数组“ NumericArray( ) = p_dbNumericArray( ) ”的类似行怎么样,它似乎与额外的括号一起工作得很好?它们在这里是可选的吗?还是发生了什么微妙的事情?再次感谢。
    • 哎呀。看起来“NumericArray( ) = ...”实际上不起作用。我忘记了同时编辑太多东西。所以这些括号是绝对错误的。再次感谢。
    • @Romnie:是的,括号总是绝对错误的。他们正在调用该函数,但您实际上想要分配给它(即设置返回值)。
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2014-02-27
    • 2016-09-27
    • 2021-02-04
    • 1970-01-01
    • 2012-09-14
    • 2011-04-25
    • 2022-01-08
    相关资源
    最近更新 更多