2012-01-19 11 views
6

मैं मैं ऐसा किया माउस का उपयोग (एक "UserForm" के लिए नहीं) एक शीट के लिए एक ListBox जोड़ लिया है। मैंने छोटे हथौड़ा और रैंच आइकन पर क्लिक किया।मैं कैसे एक वर्कशीट पर एक नियंत्रण वस्तु का उल्लेख करते हैं, एक चर नाम का उपयोग कर?

ListBox1.Clear 

या

ListBox1.AddItem("An option") 

हालांकि, मैं इन listboxes के तीन (नाम, आसानी से, ListBox1, ListBox2, और:

यह ListBox आसानी से इस जैसे कोड का उपयोग कर संदर्भित किया जा रहा है ListBox3) और मैं उन्हें एरे डेटा के साथ पॉप्युलेट करने के लिए एक फ़ंक्शन लिखना चाहता हूं, जैसे:

Call populate_listbox(ListBox2, designAreaArray) 

जहां पहला तर्क सूची बॉक्स नाम है, दूसरा डेटा है।

लेकिन मैं कैसे भेजने के लिए "ListBox2" सही ढंग से पता नहीं है, या समारोह के भीतर सही ढंग से कहते हैं।

उदाहरण के लिए:

Dim controlName as string 
controlName = "ListBox1" 

काम नहीं करता है, इस प्रकार है, भले ही मैं समारोह को परिभाषित:

Sub populate_listbox(LB As ListBox, dataArray As Variant) 
    Dim i As Integer: i = 0 
    For i = LBound(dataArray, 2) + 1 To UBound(dataArray, 2) ' Skip header row 
     LB.AddItem (dataArray(index, i)) 
    Next i 
End Sub 

जाहिर है यह एक मिलान न डेटा प्रकार त्रुटि का परिणाम है। मैं एक ListBox के रूप में "controlname" को परिभाषित करने की कोशिश की है, लेकिन है कि या तो काम नहीं किया ...

हालांकि शायद यह लिस्टबॉक्स कि सही नहीं है करने के लिए अपने संदर्भ है। मैं कई मायनों में एक नियंत्रण वस्तु का उल्लेख करने के देखा है ...

MSForms.ListBox. 
ME.ListBox 
Forms.Controls. 
Worksheet.Shapes. 

सूची पर एक पर चला जाता है, और कुछ भी मेरे लिए काम किया है।

उत्तर

6

इस प्रयास करें:

Dim cMyListbox As MSForms.ListBox 
Dim vArray As Variant 

Set cMyListbox = Sheet1.ListBox1 

vArray = Range("A1:A6").Value 
cMyListbox.List = vArray 
+0

धन्यवाद। मैंने अपने सब प्रति justnS के उत्तर को संशोधित किया है, और मेरे वैरिएबल (cMyListbox) को ऊपर बताए अनुसार सेट किया है, और संयोजन काम करता है। सूची भरने के संबंध में टिप के लिए भी धन्यवाद। – Symmitchry

+0

कोई समस्या नहीं, खुशी है कि यह आपके लिए काम करता है। – Reafidy

3

बदलें इस मैच के लिए उप हस्ताक्षर: सरणी के माध्यम से पाश के बिना

Dim cMyListbox As MSForms.ListBox 

Set cMyListbox = Sheet1.ListBox1 '// OR Worksheets("YourSheetName").Listbox1 

cMyListbox.AddItem("An option") 

इसके अलावा, आप एक लिस्टबॉक्स पॉप्युलेट कर सकते हैं, इस कोशिश

Sub populate_listbox(LB As MSForms.ListBox, dataArray As Variant)

अब आप इसे पारित कर सकते हैं जैसे आप tryi थे मूल रूप से एनजी।

नोट: यह केवल तभी काम करता है जब आपने सूची बॉक्स के "ActiveX" संस्करण का उपयोग किया हो। मुझे लगता है कि आप ऐसा इसलिए कर रहे हैं क्योंकि आप सीधे मॉड्यूल से ListBox1 को कॉल करने में सक्षम हैं।

पीएस: ActiveX नियंत्रण मूल शीट ऑब्जेक्ट के सदस्य हैं। इसलिए यदि आपके पास शीट 1 पर listbox1 है, तो आप इसे Sheet1.ListBox1 पर भी कॉल कर सकते हैं ताकि आप एकाधिक सूची बॉक्स के साथ एकाधिक चादरों के साथ समाप्त होने पर भ्रमित न हों। साथ ही, आप अपने आप को आसान बनाने के लिए नाम बदलना चाह सकते हैं।

+0

प्रतिक्रिया के लिए धन्यवाद। मैंने प्रति रेफिडी के उत्तर में अपनी परिवर्तनीय घोषणा को संशोधित किया, और मेरे उप को आपके अनुसार संशोधित किया, और यह अब काम करता है। – Symmitchry

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