如果使用循环,为什么VBA集合数据类型保留我添加的所有项的最后一个值?
我有这个收藏:如果使用循环,为什么VBA集合数据类型保留我添加的所有项的最后一个值?,vba,Vba,我有这个收藏: Public col As New Collection For Each item In col Debug.Print (item.GetName) Next 这个名为“类”的类: 我尝试在集合中添加值: For k = 1 To 10 Dim temp As New cls temp.SetName CStr(k) col.Add temp Next k 当我打印集合中所有项目的名称时: Public col As New Collec
Public col As New Collection
For Each item In col
Debug.Print (item.GetName)
Next
这个名为“类”的类:
我尝试在集合中添加值:
For k = 1 To 10
Dim temp As New cls
temp.SetName CStr(k)
col.Add temp
Next k
当我打印集合中所有项目的名称时:
Public col As New Collection
For Each item In col
Debug.Print (item.GetName)
Next
我有下一个输出:
10
10
10
10
10
10
10
10
10
10
为什么我的输出不是
1
2
3
4
5
6
7
8
9
10
?
为什么它会将最后一个值放在每个项目上?不要将
Dim temp用作新的cls
-快捷方式符号有许多缺陷
上面的表示法实际上只创建了cls
对象的一个实例,您正在向集合中添加对该实例的10个引用。每次迭代都会更新名称,因此,在最后,所有实例的名称都是“10”。如果在循环期间暂停,您会注意到,当集合中有1个项目时,项目名称将为“1”,当有2个项目时,所有名称将为“2”,依此类推
声明变量,然后每次将变量设置为新实例:
不要将Dim temp用作新的cls-快捷方式符号有许多缺陷 上面的表示法实际上只创建了
cls
对象的一个实例,您正在向集合中添加对该实例的10个引用。每次迭代都会更新名称,因此,在最后,所有实例的名称都是“10”。如果在循环期间暂停,您会注意到,当集合中有1个项目时,项目名称将为“1”,当有2个项目时,所有名称将为“2”,依此类推
声明变量,然后每次将变量设置为新实例: