我对编码有些新意,可能不会使用正确的术语,希望我说的有意义。
我创建了一个用于构建对象的类模块。我的类模块目前有一些变量(我打算在构建代码时添加一些方法)。
'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
希望这有道理......我可能没有使用最好的方法,所以请开明我。
答案 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