arrays - 从字典返回类属性的数组

标签 arrays excel vba class dictionary

背景:

最近试图回答question ,我自己在想是否可以直接从字典项返回类对象属性的数组。

代码:

TstClass 想象为具有以下代码的类模块:

Public val1 As Variant
Public val2 As Variant
Public val3 As Variant

然后用这段代码来测试:

Sub Test()

Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim lst As TstClass, key As Variant, arr As Variant

For x = 1 To 3
    Set lst = New TstClass
    lst.val1 = "A" & x
    lst.val2 = "B" & x
    lst.val3 = "C" & x
    dict.Add x, lst
Next x

For Each key In dict
    arr = Array(dict(key).val1, dict(key).val2, dict(key).val3)
Next key

End Sub

问题:

在上面的情况下 Array(dict(key).val1, dict(key).val2, dict(key).val3) 会很好地返回数组,但是如果我们想象 val4-val50 它将变得更多的代码。使用Array(...)或逐行写出Debug.Print Dict(key).Valx

问题:

是否可以直接从字典键的类对象属性返回数组?对我来说最明显的尝试是 arr = Dict(key) 希望它能以某种方式认识到我需要该项目的所有属性。最重要的是,不允许将常量、数组、用户定义类型声明为公共(public),因此像 Public Vals(0 to 2) 这样的东西也不起作用。

谢谢你, 合资企业

最佳答案

不确定这是否正是您所追求的,但是可以在您的类中创建一个方法来构建您想要的属性数组。然后,您可以在类的每个实例上调用它来获取数组详细信息。

类 - 名为“Example”:

Public val1 As Variant
Public val2 As Variant
Public val3 As Variant

Public Function GetArray() As Variant
    GetArray = Array(Me.val1, Me.val2, Me.val3)
End Function

客户端代码 - 标准模块中:

Sub SOExample()

    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    Dim lst As Example, arr As Variant, key As Variant

    For x = 1 To 3
        Set lst = New Example
        lst.val1 = "A" & x
        lst.val2 = "B" & x
        lst.val3 = "C" & x
        dict.Add x, lst
    Next

    For Each key In dict.keys
        arr = dict(key).GetArray
        Debug.Print Join(arr, ",")
    Next

End Sub

输出:

A1,B1,C1
A2,B2,C2
A3,B3,C3

关于arrays - 从字典返回类属性的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58838720/

相关文章:

Ruby 字符串是否等于字符串数组中的一个字符串?

java - 使用 POI 生成 excel 文件需要很长时间

excel - 仅用户界面 :=true doesn't seem to allow VBA changes to conditional formatting?

excel - Excel 或 Powerpoint 2007/2010 中的滚动图表

vba - 使用宏/vba 将多行从一个工作表复制到另一工作表

jquery - 如何比较两个数组并从一个数组中删除两个数组中不匹配的多个项目?

PHP - 将两个数组(相同长度)合并为一个关联?

c++ - 4 维 c++ 数组的动态内存分配以创建 HDF5 数据集

excel - 通过引用其他单元格中包含的工作表的名称来获取不同工作表中单元格的值

excel - 从电源查询中调用 gpkg 上的 sqlite3 时激活 spatialite