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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top