Índice de erro ao tentar remover o vazio de valores de uma matriz em VBA
Pergunta
Eu estou tentando executar uma Simples fórmula para remover entradas em branco a partir de uma matriz.A matriz que eu estou usando é carregado a partir de um campo em uma tabela de dados que preparei em excel chamado de TY.O nome deste campo é TY[L3 Número].Eu quero manter essa matriz dinâmica, pois pode alterar como usuário adicionar ou excluir linhas da tabela de dados.Os dados de teste estou usando tem 218 linhas, 210 do que ter entradas duplicadas (que eu vou querer remover mais tarde), e 8 entradas de "".
Quando executar a macro, eu recebo um erro de tempo de execução 9 "inferior à linha fora do intervalo" na primeira linha do meu instrução se.
Eu literalmente passei horas tentando entender por que o VBA está me dando este erro.Meu entendimento é que este é devido a uma matriz não corretamente dimensionada para processar os dados sendo passados para ele.Eu tenho usado a janela de depuração para verificar que ambas as matrizes são dimensionados corretamente.
Eu sou muito novo para a programação e o ensino de mim como eu ir, mas eu apenas o tipo encontrar a solução para este na minha própria.
Sub BuildArray()
' Load array
Dim MyArr()
Dim J As Long
' Size array
MyArr() = Range("TY[L3 Number]")
ReDim NewArr(LBound(MyArr) To UBound(MyArr))
' For Loop to search for Blanks and remove from Array
' The Lbound and UBound parameters will be defined by the size of the TY[L3 Number] field in the TY Table
J = LBound(MyArr) - 1 ' Added this recently while testing the theory that J may start at the 2nd index in the loop, did not help
For i = LBound(MyArr) To UBound(MyArr)
If MyArr(i) <> "" Then ' This is where I error out
J = J + 1
NewArr(J) = MyArr(i)
End If
Next i
ReDim Preserve NewArr(LBound(MyArr) To J)
' Debug Window to show results of revised array.
Dim c As Long
For c = LBound(NewArr) To UBound(NewArr)
Debug.Print NewArr(c)
Next
Debug.Print "End of List"
End Sub
Solução
Intervalos são matrizes multidimensionais..(i.é.MyArray(#,#) onde o primeiro índice será a linha e a segunda coluna.
Mudança
If MyArr(i) <> "" Then
para
If MyArr(i,1) <> "" Then
se o seu alcance tem apenas uma coluna, o segundo índice será sempre 1