Non
una risposta, ma uno studio sulla matrice di indirizzamento.
Questo codice: ReDim Preserve matriz (1) matriz (1) = 5
Crea una matrice con due elementi: 0 e 1 UBound() restituisce 1
Ecco un codice che può aiutare ad esplorare il problema:
Option Explicit
Sub Macro1()
Dim matriz() As Variant
Dim x As Variant
Dim i As Integer
matriz = Array(0)
ReDim Preserve matriz(1)
matriz(1) = 5
ReDim Preserve matriz(2)
matriz(2) = 10
ReDim Preserve matriz(3)
matriz(3) = 4
Debug.Print "Initial For Each"
For Each x In matriz
Debug.Print ":" & x
Next x
Debug.Print "Initial For i = 0"
For i = 0 To UBound(matriz)
Debug.Print ":" & matriz(i)
Next i
Debug.Print "Initial For i = 1"
For i = 1 To UBound(matriz)
Debug.Print ":" & matriz(i)
Next i
Debug.Print "remove one"
For i = 1 To UBound(matriz)
matriz(i - 1) = matriz(i)
Next i
ReDim Preserve matriz(UBound(matriz) - 1)
For Each x In matriz
Debug.Print ":" & x
Next x
Debug.Print "remove one more"
For i = 1 To UBound(matriz)
matriz(i - 1) = matriz(i)
Next i
ReDim Preserve matriz(UBound(matriz) - 1)
For Each x In matriz
Debug.Print ":" & x
Next x
End Sub
out:
Initial For Each
:0
:5
:10
:4
Initial For i = 0
:0
:5
:10
:4
Initial For i = 1
:5
:10
:4
remove one
:5
:10
:4
remove one more
:10
:4
Sebbene questa sia una buona risposta e io la sto revocando come tale, si potrebbe forse osservare che se l'obiettivo è avere qualcosa come una coda, allora questo sarebbe un modo terribilmente inefficiente per implementarlo. Il codice che fa un uso pesante di cose come questa dovrebbe probabilmente essere modificato in modo da non richiederlo. –
Si noti che c'è un elemento 0 in modo che 'For Each' riporterà sempre qualcosa per il primo (0 °) elemento. – rheitzman
"Noi"? Il commento probabilmente avrebbe dovuto essere sull'OP. – rheitzman