Domanda

Sto cercando di eseguire una formula semplice per rimuovere le voci vuote da un array.L'array che sto usando è caricato da un campo in una tabella di dati che ho impostato in Excel chiamato Ty.Il nome di questo campo è TY [numero L3].Voglio tenere questa matrice dinamica, poiché potrebbe cambiare come aggiungere o eliminare le righe dalla tabella dei dati.I dati del test che sto usando hanno 218 righe, 210 dei quali hanno voci duplicate (che vorrei rimuovere in seguito) e 8 voci di "".

Quando si esegue la macro, ottengo un errore di run-time 9 "Indscript out of range" sulla prima riga della mia istruzione se.

Ho letteralmente trascorso ore a cercare di capire perché VBA mi sta dando questo errore.La mia comprensione è che ciò è dovuto a un array non correttamente dimensionato per gestire i dati passati ad esso.Ho usato la finestra di debug per verificare che entrambi gli array siano dimensionati correttamente.

Sono abbastanza nuovo da programmare e insegnare me stesso mentre vado, ma mi sto solo trovando la soluzione a questo da solo.

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
.

È stato utile?

Soluzione

Le gamme sono array multidimensionali .. (I.e. MyArray (#, #) dove il primo indice sarà la riga e la seconda la colonna.

Cambia

 If MyArr(i) <> "" Then 
.

a

 If MyArr(i,1) <> "" Then 
.

Se la tua gamma ha solo una colonna, il secondo indice sarà sempre 1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top