web-dev-qa-db-fra.com

Dimensionner dynamiquement un tableau VBA?

Pourquoi ne puis-je pas définir la taille d'un tableau en fonction d'une variable? Quelle est la meilleure façon de contourner cela?

Dim NumberOfZombies as integer
NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) as New Zombie
22
sooprise

Vous pouvez utiliser un tableau dynamique lorsque vous ne connaissez pas le nombre de valeurs qu'il contiendra jusqu'à l'exécution:

Dim Zombies() As Integer
ReDim Zombies(NumberOfZombies)

Ou vous pouvez tout faire avec une seule instruction si vous créez un tableau local à une procédure:

ReDim Zombies(NumberOfZombies) As Integer

Tableaux de taille fixe nécessite que le nombre d'éléments contenus soit connu au moment de la compilation. C'est pourquoi vous ne pouvez pas utiliser une variable pour définir la taille du tableau - par définition, les valeurs d'une variable sont variables et ne sont connues qu'au moment de l'exécution.

Vous pourriez utiliser une constante si vous saviez que la valeur de la variable n'allait pas changer:

Const NumberOfZombies = 2000

mais il n'y a aucun moyen de transtyper entre les constantes et les variables. Ils ont des significations distinctement différentes.

42
Cody Gray

Vous devez utiliser l'instruction ReDim pour dimensionner dynamiquement les tableaux.

Public Sub Test()
    Dim NumberOfZombies As Integer
    NumberOfZombies = 20000
    Dim Zombies() As New Zombie
    ReDim Zombies(NumberOfZombies)

End Sub

Cela peut sembler étrange lorsque vous connaissez déjà la taille de votre tableau, mais c'est parti!

3
Chris Spicer

Vous pouvez également étudier l'utilisation de l'objet Collection. Cela fonctionne généralement mieux qu'un tableau pour les objets personnalisés, car il dimensionne dynamiquement et propose des méthodes pour:

  • Ajouter
  • Compter
  • Retirer
  • Élément (index)

De plus, il est normalement plus facile de parcourir une collection car vous pouvez utiliser la structure for ... each très facilement avec une collection.

2
Fink

Vous devez utiliser une constante.

CONST NumberOfZombies = 20000
Dim Zombies(NumberOfZombies) As Zombies

ou si vous voulez utiliser une variable, vous devez le faire de cette façon:

Dim NumberOfZombies As Integer
NumberOfZombies = 20000

Dim Zombies() As Zombies

ReDim Zombies(NumberOfZombies)
1
carny666