将对象添加到 Collection 只会一遍又一遍地添加最新的实例
Adding objects to Collection adds only the most recent instance over and over
当我执行以下代码时,除了循环体内的最后一行外,一切都按预期工作。虽然这确实向 Collection 添加了一个 "filmSheet" 对象,但它只会用最后创建的 filmSheet 对象一遍又一遍地填充它。这是因为每次代码退出并重新进入循环时,所有以前的 filmSheet 对象都被销毁了吗?不过,这真的很奇怪,因为它好像用最后一个覆盖了所有以前的 filmSheet 对象。任何人都知道这里发生了什么以及如何纠正它?
顺便说一句,filmSheet 对象基本上是 class 具有一些附加功能的 Excel 工作表对象的包装器。
For Each genre In genreCollection
Dim tempFilmSheet As New filmSheet
Call tempFilmSheet.AddSheetToWorkbook(wb)
Call tempFilmSheet.SetGenre(genre)
Call tempFilmSheet.CopyFilmListRangeToSheet(originalDataSheet)
Call tempFilmSheet.DeleteUnrelatedRows
Call tempFilmSheet.CountFilmsInGenre
totalFilmCount = totalFilmCount + tempFilmSheet.filmCount
filmSheetCollection.Add tempFilmSheet
Next
您只需声明一次变量,然后每次都使用关键字Set
将同一个变量分配给新的 filmSheet 实例引用:
Dim tempFilmSheet As filmSheet 'declare variable only once
For Each genre In genreCollection
Set tempFilmSheet = New filmSheet 'instantiate n-times
Call tempFilmSheet.AddSheetToWorkbook(wb)
Call tempFilmSheet.SetGenre(genre)
Call tempFilmSheet.CopyFilmListRangeToSheet(originalDataSheet)
Call tempFilmSheet.DeleteUnrelatedRows
Call tempFilmSheet.CountFilmsInGenre
totalFilmCount = totalFilmCount + tempFilmSheet.filmCount
filmSheetCollection.Add tempFilmSheet
Next
为了更好地理解问题,您可能需要阅读 declaring an object with Dim
and setting an object to an object reference 与 Set
之间的区别。
当我执行以下代码时,除了循环体内的最后一行外,一切都按预期工作。虽然这确实向 Collection 添加了一个 "filmSheet" 对象,但它只会用最后创建的 filmSheet 对象一遍又一遍地填充它。这是因为每次代码退出并重新进入循环时,所有以前的 filmSheet 对象都被销毁了吗?不过,这真的很奇怪,因为它好像用最后一个覆盖了所有以前的 filmSheet 对象。任何人都知道这里发生了什么以及如何纠正它?
顺便说一句,filmSheet 对象基本上是 class 具有一些附加功能的 Excel 工作表对象的包装器。
For Each genre In genreCollection
Dim tempFilmSheet As New filmSheet
Call tempFilmSheet.AddSheetToWorkbook(wb)
Call tempFilmSheet.SetGenre(genre)
Call tempFilmSheet.CopyFilmListRangeToSheet(originalDataSheet)
Call tempFilmSheet.DeleteUnrelatedRows
Call tempFilmSheet.CountFilmsInGenre
totalFilmCount = totalFilmCount + tempFilmSheet.filmCount
filmSheetCollection.Add tempFilmSheet
Next
您只需声明一次变量,然后每次都使用关键字Set
将同一个变量分配给新的 filmSheet 实例引用:
Dim tempFilmSheet As filmSheet 'declare variable only once
For Each genre In genreCollection
Set tempFilmSheet = New filmSheet 'instantiate n-times
Call tempFilmSheet.AddSheetToWorkbook(wb)
Call tempFilmSheet.SetGenre(genre)
Call tempFilmSheet.CopyFilmListRangeToSheet(originalDataSheet)
Call tempFilmSheet.DeleteUnrelatedRows
Call tempFilmSheet.CountFilmsInGenre
totalFilmCount = totalFilmCount + tempFilmSheet.filmCount
filmSheetCollection.Add tempFilmSheet
Next
为了更好地理解问题,您可能需要阅读 declaring an object with Dim
and setting an object to an object reference 与 Set
之间的区别。