2010-03-08 17 views
7

मेरे पास कोड का एक टुकड़ा है जो ऐसा करने की अपेक्षा नहीं करता है। वीबीए Arrays सभी माध्यमों से mutable हैं, लेकिन ऐसा लगता है कि जब वे एक कुंजी में कुछ चाबियों के मूल्य के रूप में संग्रहीत कर रहे हैं, वे अब mutable नहीं हैं। कोई विचार?एक वीबीए शब्दकोश में सरणी मान बदलना

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 
+0

समस्या यह है कि जब आप mydict ("ए") के साथ शब्दकोश से सरणी प्राप्त करते हैं, तो आपको एक प्रति प्राप्त होती है और संदर्भ नहीं। देखें: http://stackoverflow.com/questions/1402876/vba-populating-collection-with-arrays/1402986#1402986 – jtolle

उत्तर

9

ऐसा लगता है कि आपको सरणी मान को अपडेट करने के लिए अभी तक एक और var सेट करने की आवश्यकता होगी।

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

मेरे लिए बहुत अच्छा काम करता है! – Gordon

0

मैंने इस जवाब को श्री इरिज़ारी के जवाब पर टिप्पणी के रूप में लिखा होगा, लेकिन मुझे अनुमति नहीं है। वैसे भी .... मैंने शब्द की पहली पंक्ति में सरणी असाइन करने के लिए कोड की अंतिम पंक्ति (नीचे) लिखने की कोशिश की, लेकिन यह काम नहीं किया। उस आइटम में सरणी पहले जैसी थी।

mydict.items(1) = mArray 

जो मैंने पढ़ा है उसके आधार पर, ऐसा लगता है कि आप जिस शब्द को बुला रहे हैं उसके उदाहरण के साथ ऐसा करना है। मैंने इसे निम्नलिखित पंक्ति में बदल दिया और यह काम किया।

mydict(mydict.keys(1)) = mArray 

मुझे अभी भी यकीन नहीं है कि ऐसा क्यों है, लेकिन वहां है।

संबंधित मुद्दे