VBA: ¿Diferencia en dos formas de declarar un nuevo objeto? (Intentando entender por qué funciona mi solución)

Estaba creando un nuevo objeto dentro de un bucle y agregando ese objeto a una colección; pero cuando volví a leer la colección, siempre estaba llena por completo con el último objeto que había agregado. Se me ocurrieron dos formas de evitar esto, pero simplemente no entiendo por qué mi implementación inicial fue incorrecta.

Original:

Dim oItem As Variant
Dim sOutput As String
Dim i As Integer

Dim oCollection As New Collection
For i = 0 To 10
    Dim oMatch As New clsMatch
    oMatch.setLineNumber i
    oCollection.Add oMatch
Next
For Each oItem In oCollection
    sOutput = sOutput & "[" & oItem.lineNumber & "]"
Next
MsgBox sOutput

Esto dio como resultado que cada número de línea sea 10; Obviamente no estaba creando nuevos objetos, sino que usaba el mismo cada vez a través del ciclo, a pesar de que la declaración estaba dentro del ciclo.

Entonces, agreguéSet oMatch = Nothing inmediatamente antes delNext línea, y esto solucionó el problema, ahora era de 0 a 10. Entonces, si el objeto antiguo se destruyó explícitamente, ¿estaba dispuesto a crear uno nuevo? ¿Pensé que la siguiente iteración a través del ciclo podría causar que algo declarado dentro del ciclo se destruya debido al alcance?

Curioso, probé otra forma de declarar un nuevo objeto:Dim oMatch As clsMatch: Set oMatch = New clsMatch. Esto también resulta en 0 a 10.

¿Alguien puede explicarme por qué la primera implementación fue incorrecta?

Respuestas a la pregunta(3)

Su respuesta a la pregunta