我只是在学习Excel VBA,我想在这里缺少一些概念。
假设我有一个包含5个汽车品牌的表格。我想把这些读到我自己的汽车品牌类模块中,然后打印出他们的名字。
我有两种方法可以做到这一点,只有一种方法有效。我想知道是否有人能解释原因?
工作版:
dim colCarBrands as new collection
For i = 1 To 5
Dim newCarBrand As clsCarBrand
Set clsCarBrand = New clsCarBrand
newCarBrand.BrandName chaletsSheet.Cells(i, 1)
colCarBrands.Add newCarBrand , newChalet.nameTechnical
Next
Dim b As clsCarBrand
For Each b In colCarBrands
' Print items
Debug.Print b.BrandName
Next
不工作版本:
dim colCarBrands as new collection
For i = 1 To 5
Dim newCarBrand As New clsCarBrand
newCarBrand.BrandName chaletsSheet.Cells(i, 1)
colCarBrands.Add newCarBrand , newChalet.nameTechnical
Next
Dim b As clsCarBrand
For Each b In colCarBrands
' Print items
Debug.Print b.BrandName
Next
在这个版本中,该系列中的所有汽车品牌都是相同的(它是表格中的最后一个)
任何想法为什么?
谢谢!
答案 0 :(得分:1)
在第二个版本中,Dim newCarBrand As New clsCarBrand
创建了该类的单个实例。后续遍历该循环只是更改其BrandName
属性,然后将另一个对同一对象的引用添加到集合中。如果将Dim
语句移到循环之前,这将更加清晰。 Dim
语句不是重复运行的可执行语句。
在第一种情况下,Set
语句创建对象的新实例,每个实例又添加到集合中。