2011-09-28 11 views
5

मैंने Excel में मैक्रो लिखा जो गतिशील सरणी का उपयोग करता है। उपयोगकर्ता उस सरणी में तत्व जोड़ देंगे।एक्सेल में वीबीए में स्थायी रूप से सरणी के तत्वों को स्टोर करना संभव है?

क्या तत्वों को स्थायी रूप से स्टोर करना संभव है, इसलिए कार्यपुस्तिका बंद होने के बाद भी तत्व उपलब्ध होंगे?

चाल यह है कि मैं वर्कशीट पर तत्वों को स्टोर नहीं करना चाहता हूं और वर्कबुक खोलने पर उन्हें सरणी में वापस डालना चाहता हूं, लेकिन तत्वों को सरणी में स्थायी रूप से सहेजने के लिए।

+0

क्या एक पत्रक पर भंडारण के साथ गलत क्या है? – Reafidy

+0

यह भी देखें: http://stackoverflow.com/questions/7350388/saving-vba-dictionary-object-in-excel/7350849#7350849 कुछ नोट्स हैं। – Fionnuala

+2

कृपया काम करने वाले उत्तरों को स्वीकार करना याद रखें। उत्तरों के ऊपरी बाईं ओर एक तीर आइकन है - आप इसका उत्तर स्वीकार करने के लिए चुन सकते हैं। – aevanko

उत्तर

5

आपके सबसे अच्छे दांव में से एक वर्कशीट में सरणी मानों को संग्रहीत करना और वर्कशीट को VBA का उपयोग करके छुपाएं चिह्नित करना है।

Me.Worksheets("ArrayValuesWorksheet").Visible = False 

आप स्थानीय CSV फ़ाइलों, रजिस्ट्री, आदि तो कोड बस विभिन्न मशीनों के लिए कार्यपुस्तिका को ले जाकर अलग तरीके से व्यवहार करेगा और आप सरणी की कई प्रतियां करने की क्षमता खो देंगे तरह अन्य बातों का उपयोग करते हैं। आप

Sub WriteArray() 
Dim MyArray As Variant 

MyArray = Array("x", "y", "z") 

Range("A1:C1").Value = MyArray 

End Sub 

Sub ReadArray() 

Dim MyArray As Variant 

MyArray = Range("A1:C1").Value 

End Sub 

उपयोग कर सकते हैं के बाद आप हम के रूप में छिपाने के लिए पत्रक के Visible संपत्ति का उपयोग कर सकते

संपादित

+14

अनदेखी सूची में दिखाई देने वाली शीट को रोकने के लिए 'शीट्स ("ArrayValuesWorksheet") का उपयोग करें। Visible = xlVeryHidden'। – Reafidy

+1

आप उपकरण/वीबीए प्रोजेक्ट प्रॉपर्टीज/प्रोटेक्शन टैब पर जाकर और पासवर्ड दर्ज करके पासवर्ड को अपने कोड और "बहुत छिपी हुई" चादरों की रक्षा भी कर सकते हैं। उपयोगकर्ता "बहुत छिपी हुई" चादरों को खोलने में सक्षम नहीं होगा। अनुलेख माइक्रोसॉफ्ट के शब्द "बहुत छिपे हुए" पर एलओएल। मेरा मतलब है, मैं इसे प्राप्त करता हूं बी/सी मैं वहां गया हूं ... उस नाम के साथ एनम को देखना मजेदार है। – ray

+0

सुझाव लोगों के लिए धन्यवाद, लेकिन मैं छिपी वर्कशीट में डेटा स्टोर नहीं करना चाहता, क्योंकि मैं मैक्रो को किसी प्रकार के एक्सटेंशन के रूप में वितरित करना चाहता हूं, ऐड-इन (मुझे अभी तक पता नहीं है) तो यह किसी भी कार्यपुस्तिका पर काम करेगा जब भी एक्सेल खोला जाता है। मुझे लगता है कि एक छिपी वर्कशीट संलग्न होने पर मैक्रो को इस तरह से साझा करना संभव नहीं होगा। वैसे आप सलाह दे सकते हैं मैक्रो वितरित करने का सबसे अच्छा तरीका क्या है? – user652061

0

(@ Reafidy के नीचे टिप्पणी में बहुत बढ़िया सुझाव) शीट में/लिखने सरणी पढ़ने के लिए जवाब दिया है

2

आप नाम संग्रह से किसी नाम में एक सरणी भी स्टोर कर सकते हैं, और यह नाम छुपाया जा सकता है।

Names.Add Name:="StoredArray", RefersTo:=myArray, Visible:=False 
+1

वह इसे एक स्ट्रिंग के रूप में स्टोर करेगा जो सरणी नहीं है। – Reafidy

+0

धन्यवाद रोनी और रेफिडी। यह कोई समस्या नहीं है यदि यह डेटा को स्ट्रिंग के रूप में संग्रहीत करता है क्योंकि मुझे संदेह है कि मैं रीड स्ट्रिंग को सरणी में वापस कर सकता हूं। मेरे लिए दिलचस्प क्या है जब मैं इस मैक्रो को किसी प्रकार के ऐड-इन (एक्सटेंशन) के रूप में साझा करता हूं, तो डेटा को संग्रह संग्रह में सहेजना संभव होगा? – user652061

+0

यह उत्तर है, इसे प्रारंभ करने पर नामांकित कॉन्स्टेंट से वापस सरणी में पढ़ना मुश्किल नहीं है। –

1

आपके सवाल का सीधे जवाब देने के लिए: नहीं, वहाँ एक सरणी एक जीवन भर याद में आवेदन परे है कि स्टोर करने के लिए कोई रास्ता नहीं है - आप इसे कहीं बचाने के लिए होगा।

कई विकल्प उपलब्ध हैं लेकिन आपकी सर्वश्रेष्ठता इसे शीट में सहेजने की संभावना है। 'बहुत छिपी हुई' चादरें केवल वीबीए कोड के माध्यम से दिखाई देती हैं, इसलिए उपयोगकर्ता के लिए यह वही चीज है जो सरणी हमेशा वहां होती है और स्मृति में सक्रिय होती है।

0

"कोई रास्ता नहीं है ...", >>> हाँ कर सकते हैं!

कुछ उदाहरण: लिस्टबॉक्स/ComboListBox (एक पत्रक पर) = सरणी ...

2 डी संस्करण सरणी के लिए: रेंज() = सरणी।

या एक commandbarMenu (उन बनाया जा सकता है बहुआयामी) में संग्रहीत

या whateverthat कार्यपुस्तिका पुन: लोड के बाद रहता है ...

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