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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top