Ayrıca, işlevdeki ByRef veya ByVal değerlerini de kullanabilirsiniz. ByVal, bir işlev veya alt öğeye gönderdiğiniz nesne, işlev içinde kullanılacak ve işlev tamamlandıktan sonra atılacak özel belleğe kopyalanır. ByRef, bir işleve gönderdiğiniz nesneye başvurur ve yaptığınız tüm işlemler, anahtarları kaldırma, nesneyi ayarlama vb. Doğrudan gönderdiğiniz nesneye yapılır.
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
Test alt öğesi, alt koşulu için değişken türden bir değişkenle çağrılar. Fonksiyonda alt tarafa gönderilen nesnenin türünü doğrularım. Nesne türü bir sözlük nesnesi değilse (bu değilse), alt testte bildirilen test_tict nesnesi olan in_Dict nesnesi bir sözlük nesnesine atanacaktır. Referansı daha iyi göstermek için ayrıca addvalue adı verilen ikinci alt kısmı da dahil ettim. Nesneyi tekrar referans olarak işleve iletirim ve sözlük nesnesine başka bir anahtar eklerim. Ana test alt testinde sayımı gönderin. Bu durumda 2 anahtar mevcut.
Bu soru, kendi isteğinize göre 5 dakika önce http://stackoverflow.com/questions/4038021/vba-return-dictionary-from-function adresine benzerdir. – JohnFx
Vay canına! (minimum karakter gereksinimini karşılar) – quakkels