Error de subíndice Al intentar eliminar los valores en blanco de una matriz en VBA
Pregunta
Estoy tratando de ejecutar una fórmula simple para eliminar las entradas en blanco de una matriz.La matriz que estoy usando está cargada de un campo en una tabla de datos que he configurado en Excel llamado Ty.El nombre de este campo es Ty [L3 número].Quiero mantener esta matriz dinámica, ya que puede cambiar a medida que el usuario agregue o elimine filas de la tabla de datos.Los datos de prueba que estoy usando tienen 218 filas, 210 de las cuales tienen entradas duplicadas (que querré eliminar más tarde), y 8 entradas de "".
Al ejecutar la macro, recibo un error de ejecución 9 "Subscript Out of Range" en la primera línea de mi declaración.
He pasado literalmente horas tratando de entender por qué VBA me está dando este error.Mi comprensión es que esto se debe a una matriz que no es correcta para manejar los datos que se les pasa.He usado la ventana de depuración para verificar que ambas matrices sean de tamaño correctamente.
Soy bastante nuevo para programar, y enseñarme a mí mismo a medida que voy, pero solo amable encuentra la solución a esta por mi cuenta.
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
Solución
rangos son matrices multidimensionales ... (es decir, MyArray (#, #) donde el primer índice será la fila y la segunda columna.
CAMBIO
If MyArr(i) <> "" Then
a
If MyArr(i,1) <> "" Then
Si su gama tiene solo una columna, el segundo índice siempre será 1