将对象添加到 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 referenceSet 之间的区别。