आप फ़ंक्शन में ByRef या ByVal मानों का भी उपयोग कर सकते हैं। ByVal, आपके द्वारा किसी फ़ंक्शन या उप को भेजे गए ऑब्जेक्ट को फ़ंक्शन के अंदर उपयोग करने के लिए निजी स्मृति में कॉपी किया गया है और फ़ंक्शन पूरा होने के बाद त्याग दिया गया है। ByRef, आपके द्वारा किसी फ़ंक्शन में भेजे गए ऑब्जेक्ट को संदर्भित किया जाता है और आपके द्वारा किए गए सभी जोड़ों, कुंजी को हटाने, ऑब्जेक्ट को इत्यादि करने के लिए, सीधे आपके द्वारा भेजे गए ऑब्जेक्ट पर किया जाता है।
उदा।
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
परीक्षण उप उप-सेट के प्रकार प्रकार के चर के साथ कॉल उप कॉल करता है। फ़ंक्शन में मैं सब को भेजे गए ऑब्जेक्ट के प्रकार को मान्य करता हूं। यदि ऑब्जेक्ट प्रकार एक शब्दकोश ऑब्जेक्ट नहीं है (जो यह नहीं है) तो ऑब्जेक्ट in_Dict जो वास्तव में उप परीक्षण में घोषित testDict ऑब्जेक्ट है, को एक शब्दकोश ऑब्जेक्ट पर सेट किया जाएगा।
संदर्भ को बेहतर ढंग से प्रदर्शित करने के लिए मैंने दूसरा उप-नामक जोड़ा भी शामिल किया। मैं ऑब्जेक्ट को फ़ंक्शन पर फिर से संदर्भ के रूप में पास करता हूं और शब्दकोश ऑब्जेक्ट में एक और कुंजी जोड़ता हूं। मुख्य परीक्षण उप बीमार में गिनती पोस्ट करें। इस मामले में 2 कुंजी मौजूद हैं।
स्रोत
2012-01-13 16:03:05
यह प्रश्न http://stackoverflow.com/questions/4038021/vba-return-dictionary-from- कार्यक्षमता के समान ही है जो आपके स्वयं से 5 मिनट पहले पूछता है। – JohnFx
वाह! (न्यूनतम चरित्र आवश्यकता को पूरा करना) – quakkels