excelvba类模块逻辑
我只是在学习ExcelVBA,我想这里缺少了一些概念 假设我有一张5个汽车品牌的表格。我想把这些读入我自己的汽车品牌课程模块,然后打印它们的名字 我有两种方法,只有一种有效。我想知道是否有人能解释为什么 工作版本:excelvba类模块逻辑,excel,class,vba,Excel,Class,Vba,我只是在学习ExcelVBA,我想这里缺少了一些概念 假设我有一张5个汽车品牌的表格。我想把这些读入我自己的汽车品牌课程模块,然后打印它们的名字 我有两种方法,只有一种有效。我想知道是否有人能解释为什么 工作版本: dim colCarBrands as new collection For i = 1 To 5 Dim newCarBrand As clsCarBrand Set clsCarBrand = New clsCarBrand newCarBrand.
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
不工作版本:
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
在这个版本中,系列中的所有汽车品牌都是相同的(这是表格中的最后一个)
你知道为什么吗
谢谢 在第二个版本中,
Dim newCarBrand As New clsCarBrand
创建类的单个实例。随后通过该循环的过程只需更改其BrandName
属性,然后将对该对象的另一个引用添加到集合中。如果将Dim
语句移动到循环之前,这将更加清晰Dim
语句不是重复运行的可执行语句
在第一种情况下,
Set
语句创建对象的新实例,每个实例依次添加到集合中 也许你可以看看:。还有一些类似的帖子你可以搜索。谢谢约翰。因此,如果我理解正确,这两种情况下的Dim语句实际上只运行一次(即不是每个循环)?@PhilTeare我从来没有将Dim
视为“运行”。它在编译时而不是运行时用于分配存储并将变量名与该存储关联<代码>新建在首次使用时创建对象。在VBA中,惯例是将所有Dim
语句放在过程的开头(至少根据):“注意,在过程中使用Dim语句时,通常将Dim语句放在过程的开头。”