9
votes

Modification des valeurs de tableau dans un dictionnaire VBA

J'ai un morceau de code qui ne semble pas faire ce qu'il devrait faire. Les matières VBA sont mutables par tous les moyens, mais il semble que lorsqu'ils sont stockés dans un dictionnaire comme des valeurs de certaines clés, elles ne sont plus mutables. Des idées?

Sub foo()
    Dim mydict As New Dictionary
    mydict.Add "A", Array(1, 2, 3)
    MsgBox mydict("A")(1)
    ''# The above shows 2, which is fine
    mydict("A")(1) = 34
    MsgBox mydict("A")(1)
    ''# The above also shows 2, which is not fine
End Sub


1 commentaires

Le problème est que lorsque vous obtenez le tableau hors du dictionnaire avec MyDICT ("A"), vous obtenez une copie et non une référence. Voir: Stackoverflow.com/questions/1402876 / ...


3 Réponses :


12
votes

Il semble que vous auriez besoin de définir un autre var pour mettre à jour la valeur de la matrice.

mArray = mydict.Item(1)
mArray(1) = 34
mydict.Item(1) = mArray


0 commentaires

0
votes

J'aurais écrit cette réponse comme un commentaire à la réponse de M. Irizarry, mais je ne suis pas autorisé. Quoi qu'il en soit ... J'ai essayé d'écrire cette dernière ligne de code (ci-dessous) pour attribuer la matrice au premier élément du dictionnaire, mais cela n'a pas fonctionné. Le tableau de cet article est resté tel qu'il était auparavant. XXX PRE>

Sur la base de ce que j'ai lu ailleurs, il semble avoir à voir avec l'instance du dictionnaire que vous appelez. Je l'ai changé à la ligne suivante et cela a fonctionné. P>

mydict(mydict.keys(1)) = mArray


0 commentaires

1
votes

J'ai créé une procédure pour résoudre le même problème, je pourrais donc le garder en tant que "OneLiner":
xxx


0 commentaires