VBA |如何创建一个类模块来构建对象并将它们分配给数组/集合

时间:2017-09-30 02:16:03

标签: excel vba excel-vba class object

我对编码有些新意,可能不会使用正确的术语,希望我说的有意义。

我创建了一个用于构建对象的类模块。我的类模块目前有一些变量(我打算在构建代码时添加一些方法)。

'CLASS MODULE NAMED clsNodes

Public i As Single
Public j As Single
Public coll As Collection

我的模块将根据用户输入的单元格值构建对象

Option Explicit

Dim i As Single, j As Single
Dim ni_nodes As Single, nj_anchors As Single

ni_nodes = range("A1")
nj_nodes = range("A2")

For i = 1 to ni_nodes
    For j = 1 to nj_nodes

        Set node = New clsNodes
        node.i = i
        node.j = j

    Next j
Next i

我的代码当前的问题是,当它逐步执行for循环时,对象节点会在每次运行j for循环时被覆盖。

我想要做的是创建一个新对象或将对象添加到集合中,以便我可以轻松地引用该对象及其变量。例如,在我的模块中,我想调用类似于......的节点。

1stnode_i_value = node(1).i
3rdnode_j_value = node(3).j

希望这有道理......我可能没有使用最好的方法,所以请开明我。

2 个答案:

答案 0 :(得分:1)

只能使用String值键入一个集合。您可以将对象实例存储为集合中的,但集合有许多缺点,因此可以选择更好的选项,如数组或字典。

由于我们想保持这个简单,我会选择一个数组。您的类实例被覆盖,因为您没有保存它。要保存所有类实例,可以执行以下操作:

Option Explicit

Dim i As Single, j As Single
Dim ni_nodes As Single, nj_anchors As Single
dim arr() as variant
dim cnt as integer


ni_nodes = range("A1")
nj_nodes = range("A2")

redim arr(1 to ni_nodes*nj_nodes)
cnt=0
For i = 1 to ni_nodes
    For j = 1 to nj_nodes

        Set node = New clsNodes
        node.i = i
        node.j = j
        cnt=cnt+1
        set arr(cnt)=node
    Next j
Next i

要从数组中检索对象,您应该这样做:

dim obj as object
set obj=arr(i) 'i is the index you want

或:

dim obj as clsNode
set obj=new clsNode
set obj=arr(i)

答案 1 :(得分:1)

您可以将对象存储在集合中:

Sub Test()

    Dim Node As clsNodes, i As Long, j As Long
    Dim coll As New Collection, n

    For i = 1 To 5
        For j = 1 To 5

            Set Node = New clsNodes
            Node.i = i
            Node.j = j
            coll.Add Node

        Next j
    Next i

    'list out stored objects
    For Each n In coll
        Debug.Print n.i, n.j
    Next n

End Sub