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
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top