Vous pouvez également utiliser les valeurs ByRef ou ByVal dans la fonction. ByVal, l'objet que vous avez envoyé à une fonction ou à un sous-répertoire est copié dans une mémoire privée pour être utilisé dans la fonction et supprimé une fois la fonction terminée. ByRef, l'objet que vous avez envoyé à une fonction est référencé et toutes les manipulations que vous effectuez, la suppression des clés, la définition de l'objet etc, est directement effectuée sur l'objet que vous avez envoyé.
E.g.
Sub test
DIM testDict as variant
call setdict(testDict)
testDict.Add "test", "value"
call addValue(testDict, "test2","another value")
msgbox testDict.Count
Set testDict = Nothing
End Sub
Sub setdict(ByRef in_Dict as Variant)
If Typename(in_Dict) <> "Dictionary" Then
SET in_Dict = CreateObject("Scripting.Dictionary")
end if
end sub
sub addValue(ByRef in_Obj as Variant, ByVal in_Key as String, ByVal in_Value as String)
if not in_Obj.Exists(in_Key) then
in_Obj.Add in_Key, in_Value
end if
end sub
Le sous-appel de test avec une variable de type variant au sous-ensemble. Dans la fonction je valide le type de l'objet envoyé au sous-marin. Si le type d'objet n'est pas un objet dictionnaire (ce qui n'est pas le cas), alors l'objet in_Dict, qui est en fait l'objet testDict déclaré dans le sous-test, sera défini sur un objet dictionnaire.
Pour mieux démontrer la référence, j'ai également inclus le second sous-élément appelé addvalue. Je repasse l'objet à la fonction comme référence et ajoute une autre clé à l'objet dictionnaire. Dans le test principal sub malade puis poster le compte. Dans ce cas, il y a 2 clés présentes.
Cette question est étrangement similaire à http://stackoverflow.com/questions/4038021/vba-return-dictionary-from-function demandé 5 minutes avant le vôtre. – JohnFx
ouah! (Répondre à l'exigence de caractère minimum) – quakkels