web-dev-qa-db-fra.com

VBA en boucle à travers une collection

J'ai une collection de fichiers que j'ai sélectionnés dans la fonction SelectManyFiles et je veux exécuter plusieurs sous-marins privés sur chaque dessin dans la fonction de collection. Voici mon code:

Sub Main()

Dim Drawing As Object
Dim Drawings As Collection
Set Drawings = SelectManyFiles()

For Each Drawing In Drawings
    'Call multiple private subs to run on each drawing
Next Drawing
End Sub

Je pense qu'il y a quelque chose qui ne va pas avec la boucle mais je ne sais pas exactement! Toute aide est appréciée.

11
GhostTiger

La collection renvoyée par SelectManyFiles ne renvoie pas une collection d'objets. Il renvoie probablement une collection de cordes, mais ce n'est qu'une supposition. Changez votre sous-marin en ceci

Sub Main()

Dim Drawing As Variant
Dim Drawings As Collection
Set Drawings = SelectManyFiles()

For Each Drawing In Drawings
    Debug.Print TypeName(Drawing)
Next Drawing
End Sub

Et voyez ce que Debug.Print vous offre. S'il s'agit d'un scalaire (chaîne, long, double, booléen, etc.), vous devez déclarer Drawing comme Variant. Ce n'est que si tous les éléments de la collection sont des objets que vous pouvez utiliser Object.

12
Dick Kusleika