Not an answer, but a study of array addressing.
This code: ReDim Preserve matriz (1) matriz (1) = 5
Creates an array with two elements: 0 and 1 UBound () returns 1
Here are some codes that can help you fix the problem:
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
Of:
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
rheitzman
source share