Erreur d'indice Lorsque vous essayez de supprimer des valeurs vierges d'un tableau dans VBA
Question
J'essaie d'exécuter une formule simple pour éliminer les entrées vierges d'un tableau.Le tableau que j'utilise est chargé à partir d'un champ dans une table de données que j'ai installée dans Excel appelé TY.Le nom de ce champ est ty [numéro L3].Je souhaite conserver cette matrice dynamique, car cela pourrait changer en tant que utilisateur Ajoutez ou supprimez des lignes de la table de données.Les données d'essai que j'utilise possèdent 218 lignes, dont 210 ont des entrées en double (que je voudrais supprimer plus tard) et 8 entrées de "".
Lors de l'exécution de la macro, j'obtiens une erreur d'exécution 9 "Indice hors plage" sur la première ligne de ma déclaration IF.
J'ai littéralement passé des heures à essayer de comprendre pourquoi VBA me donne cette erreur.Ma compréhension est que cela est dû à un tableau pas correctement dimensionné pour gérer les données qui lui sont transmises.J'ai utilisé la fenêtre de débogage pour vérifier que les deux tableaux sont correctement dimensionnés.
Je suis assez nouveau à la programmation et à m'apprendre comme je vais, mais je viens de trouver la solution à celui-ci seul.
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
La solution
Les gammes sont des tableaux multidimensionnels .. (c'est-à-dire myarray (#, #) où le premier index sera la ligne et la seconde la colonne.
changer
If MyArr(i) <> "" Then
à
If MyArr(i,1) <> "" Then
Si votre plage n'a qu'une colonne, le deuxième index sera toujours 1