11
votes

Définir la propriété d'article d'une collection à VBA

Je suis surpris de savoir à quel point cela a été difficile à faire, mais j'imagine que c'est une solution rapide, donc je vais demander ici (google et documentation recherchée, mais ni aidé). J'ai du code qui ajoute des éléments à une collection à l'aide de clés. Lorsque je rencontre une clé qui existe déjà dans la collection, je veux simplement la définir en ajoutant un numéro à la valeur actuelle.

Voici le code: xxx

La première fois que j'ajoute la paire de la clé / de la valeur dans la collection, j'ajoute un entier comme valeur. Lorsque je rencontre à nouveau la clé, j'essaie d'ajouter un autre entier à la valeur, mais cela ne fonctionne pas. Je ne pense pas que le problème réside dans une sorte d'objet mal match ou quelque chose de similaire. Le message d'erreur que je reçois actuellement est

Erreur d'exécution 424: Objet requis

vba

1 commentaires

Cette réponse à une question antérieure et connexe devrait également répondre à votre question: Stackoverflow.com/questions/5709444/Modify-value-by-key/... . La version courte est que les collections ne fonctionnent pas comme des tableaux; Vous ne pouvez pas réaffecter un "élément". Les réponses d'autres personnes ont déjà donné sont bonnes façons d'obtenir ce que vous voulez.


3 Réponses :


0
votes

Je pense que vous devez supprimer la paire de clés existante, puis ajouter la clé à la collection à nouveau mais avec la nouvelle valeur


0 commentaires

9
votes

dictionnaires est plus polyvalent et plus efficace que collections . Si vous êtes allé cet itinéraire, vous pouvez exécuter un test simple sur le dictionnaire directement ci-dessous, puis mettez à jour la valeur de la clé

Patrick Matthews a écrit un excellent article sur dictionnaires v collections xxx


1 commentaires

Dictionnaire est meilleur que la collecte pour tout sauf une chose: Dictionnaire ne préserve pas la commande. Dans la plupart de mes applications, l'ordre est important; J'ai été vissé une fois ou deux fois par dictionnaire à cause de cela!



15
votes

Vous ne pouvez pas modifier les valeurs une fois qu'ils ont été ajoutés à une collection. Donc, cela n'est pas possible: xxx pré>

à la place, vous pouvez sortir l'objet de la collection, éditer sa valeur et le ajouter. P>

temp = aColl.Item(aKey)
aColl.Remove aKey
aColl.Add temp + someValue, aKey


0 commentaires