Créer dynamiquement des Tableaux Dynamiques en VBA
Mon objectif est d'utiliser un tableau de noms de créer des variables dynamiques en VBA, voici le code:
Sub mymacro()
Dim names()
names = Array("cat_code()", "dog_code()", "eagle_code()")
For Each c In names
Dim c As Integer
Next
end sub
Et bien sûr mon vrai nom de la matrice a des centaines d'animaux de sorte qu'il serait plutôt ennuyeux de faire Dim
pour chacune et chacun d'entre eux. L'erreur que j'obtiens est Compile Error: Duplicate declaration in current scope
Quelle est la meilleure solution envisageable pour mon objectif?
avez-vous besoin de tableaux d'exister? Pour quoi? Qu'essayez-vous de faire?
Je vous remercie pour votre réponse mehow comme toujours, et merci à toi aussi Mike Woodhouse, pas tout à fait ce que j'espérais, mais à la fois très intelligent néanmoins, je pense. Je vais mettre à jour ma question et voir si cela crée une réponse que je suis heureux avec.
le problème comme vous l'avez dit à l'origine devrait être résolu maintenant, si vous avez une autre question à envisager de demander un nouveau, basé sur ce que vous avez appris dans cette question. Essayez d'éviter de changer votre question d'une manière qui rendrait les bonnes réponses
ok mehow, je comprends votre point, et je vais poser une autre question
Je vous remercie pour votre réponse mehow comme toujours, et merci à toi aussi Mike Woodhouse, pas tout à fait ce que j'espérais, mais à la fois très intelligent néanmoins, je pense. Je vais mettre à jour ma question et voir si cela crée une réponse que je suis heureux avec.
le problème comme vous l'avez dit à l'origine devrait être résolu maintenant, si vous avez une autre question à envisager de demander un nouveau, basé sur ce que vous avez appris dans cette question. Essayez d'éviter de changer votre question d'une manière qui rendrait les bonnes réponses
ok mehow, je comprends votre point, et je vais poser une autre question
OriginalL'auteur steinbitur | 2013-09-24
Vous devez vous connecter pour publier un commentaire.
L'erreur de compilation que vous obtenez est causée par une déclaration en double dans le champ d'application actuel.
En d'autres termes: cela signifie que vous devez déclarer plus d'une variable avec le même nom.
L'ajout d'un
Option Explicit
déclaration sur vous modules vous oblige à déclarer chaque variable que vous utilisez. Il est très utile lorsque vous recevez ce message, car vous pouvez rapidement analyser votre code en double de la déclaration de la ligne en surbrillanceDim <variable_name>
Ceci est un exemple démontrant pourquoi vous obtenez l'erreur:
Il n'est pas facile de travailler autour de votre problème. Nous aurions été en mesure de fournir une meilleure solution à votre problème si vous mieux expliquer ce que vous essayez d'atteindre.
Il y a une solution pour obtenir ce que vous voulez, mais je ne recommanderais pas le faire de cette façon, si vous n'êtes pas sûr de vous sont en train de faire ;). Le code ci-dessous va créer un nouveau module dans votre projet VBA. Lors de l'itération sur le tableau avec les noms d'animaux, il sera d'écrire de nouvelles lignes à
Module2
ainsi, après l'exécution de votre module deux seraPour que ce code fonctionne, vous devez ajouter des références à
Microsoft Visual Basic for Applications Extensibility 5.3". You can do that by selecting
Outils>>
Références " dans la fenêtre VBE.Aussi, cela vous oblige à
Trust Access to VBA Project Object Model
. Allez à Paramètres Excel >> Trust Centre " >> les Macros >> cocher faire Confiance Au Modèle d'Objet du Projet VBA.Exécuter l'exemple de code.
OriginalL'auteur
VBA ne peut pas vraiment faire ce que vous essayez de le faire sans entrer dans un monde horrible de complications.
Comment sur l'utilisation de VBA
Collection
objet à la place? Vous aurez besoin de créer une classe simple pour contenir le nombre, parce que VBA collections de travailler avec des références, et non des valeurs.J'ai donc créé une Classe et de définir son nom de "
AnimalCounter
", avec ce contenu:Alors votre macro devient quelque chose comme ceci:
Si vous voulais des tableaux, mettre un tableau dans la classe. Ou une autre
Collection
, peut-être?OriginalL'auteur Mike Woodhouse
Mike Woodhouse a la bonne idée d'utiliser un
Collection
avec les touches de l'animal. J'ajoute deux remarques:Tout d'abord, je vous conseille d'utiliser un
Dictionary
à la place. Il est plus rapide qu'unCollection
, et permet un accès explicite à laKeys
etItems
collections. Avec unCollection
, il n'y a pas moyen de récupérer les clés, car l'objectif de base est un liste ordonnée d'éléments plutôt qu'un ordre indépendant de hachage comme avec unDictionary
.Pour le début lié à l'utilisation de la
Dictionary
type, ajoutez une référence à Microsoft Scripting Runtime.Deuxième, ne pas utiliser un tableau pour les animaux!. La raison en est que les tableaux en VBA utilisation de la valeur sémantique ( voir Collections en VBA – vue d'ensemble, les Valeurs et les Références VBA, Array Règles d'Affectation pour plus d'informations). En bref, chaque fois que vous récupérer une instance d'un tableau à partir du contenant
Collection
ouDictionary
, vous obtiendrez un nouvelle copie de l'ensemble de la matrice. Ainsi, toutes les modifications que vous apportez au contenu de ce tableau n'affectera pas le tableau réel de laDictionary
ouCollection
. Pour contourner ce problème, utilisez unCollection
à la place. Cela permettra d'utilisation par référence à la sémantique et le rend beaucoup plus facile d'ajouter de nouveaux éléments.Alors, voici ce que vous aimeriez faire:
OriginalL'auteur Joshua Honig