2013-05-30 9 views
8

मैं Aplications के लिए Visual Basic में एक संग्रह वस्तु के साथ एक समस्या (मैं Excel के साथ इसका इस्तेमाल)बनाना खाली एक VBA संग्रह

मैं इस कोड एक संग्रह वस्तु मैं फिर से उपयोग करने के लिए है कि खाली करने के लिए कोशिश कर रहा है है:

Sub limpieza(ByRef listilla As Collection) 

    While listilla.Count <> 0 
     listilla.Remove (listilla.Count) 
    Wend 

End Sub 

लेकिन जब मैं से कॉल करने की:

Dim listado As New Collection 
<I have some code here that add some values to the collection> 
limpieza (listado) 

VBA मेरे लिए कहना है कि

तर्क वैकल्पिक

नहीं है और कोड नहीं चलता है।

मैं क्या कर सकता हूं? मुझे संग्रह संग्रह वस्तु का पुन: उपयोग करने वाले लूप के नीचे इस संग्रह की सफाई का उपयोग करने की आवश्यकता है।

उत्तर

10
Dim listado As New Collection 
<I have some code here that add some values to the collection> 
limpieza listado 
'this syntax also works 
Call limpieza(listado) 

ध्यान दें कि मैंने तर्क के चारों ओर () हटा दिया है।

जब byref आप () के रूप में ऐसा करना चाहते हैं गुजर VBA डिफ़ॉल्ट रूप से byval के रूप में यह पारित करने के लिए जब तक आप Call रूप में जोड़ दें कारण बनता है।

यह वास्तव में निराशाजनक हो सकता है क्योंकि आप अक्सर subName(args) को सिंटैक्स के रूप में कभी-कभी उपयोग कर सकते हैं लेकिन समस्याओं के इन प्रकारों में भाग ले सकते हैं। चीजों को और स्पष्ट करने के लिए मैं आम तौर पर Call mySubName(args) का उपयोग करता हूं।

+0

धन्यवाद आप हल समस्याओं मैं उप दिनचर्या के साथ किया था की एक बहुत कुछ, MSDN दस्तावेज़ीकरण का एक बहुत ही उपयोगी स्रोत नहीं है जानकारी। मैं इस languaje – OlegarioFuentes

28

आप के बजाय एक अलग प्रक्रिया बुला का एक संग्रह खाली करने के लिए, चाहते हैं, बस का उपयोग

Set listado = New Collection 
+2

के साथ थोड़ा सा नोब हूँ धन्यवाद, मुझे एहसास हुआ कि सेट 'listado = कुछ भी नहीं' मैं भी कर सकता हूं। मैं एंडरलैंड्स उत्तर पर वोट रखता हूं क्योंकि यह मुझे और अधिक प्रक्रिया समस्याओं का समाधान करता है। फिर मिलते हैं। – OlegarioFuentes