खोज…


टिप्पणियों

एक Collection एक कंटेनर वस्तु है जो VBA रनटाइम में शामिल है। इसका उपयोग करने के लिए किसी अतिरिक्त संदर्भ की आवश्यकता नहीं है। एक Collection का उपयोग किसी भी डेटा प्रकार की वस्तुओं को संग्रहीत करने के लिए किया जा सकता है और आइटम के क्रमिक सूचकांक या वैकल्पिक वैकल्पिक कुंजी का उपयोग करके पुनर्प्राप्ति की अनुमति देता है।


Arrays और शब्दकोशों के साथ फ़ीचर तुलना

संग्रह सरणी शब्दकोश
का आकार बदला जा सकता है हाँ कभी कभी हाँ
आइटम ऑर्डर किए जाते हैं हाँ हाँ 2
आइटम दृढ़ता से टाइप किए गए हैं नहीं हाँ नहीं
आइटम क्रमिक द्वारा पुनर्प्राप्त किए जा सकते हैं हाँ हाँ नहीं
नए आइटम ऑर्डिनल में डाले जा सकते हैं हाँ नहीं नहीं
यह निर्धारित करने के लिए कि कोई आइटम मौजूद है या नहीं सभी आइटम को अलग करें सभी आइटम को अलग करें सभी आइटम को अलग करें
आइटम कुंजी द्वारा पुनर्प्राप्त किए जा सकते हैं हाँ नहीं हाँ
कुंजी केस-संवेदी हैं नहीं एन / ए वैकल्पिक 3
कैसे निर्धारित करें कि क्या कोई कुंजी मौजूद है त्रुटि करने वाला एन / ए .Exists समारोह में .Exists है
सभी आइटम निकालें .Remove और .Remove Erase , ReDim .RemoveAll फ़ंक्शन

1 केवल गतिशील सरणियों का आकार बदला जा सकता है, और केवल बहु-आयामी सरणियों का अंतिम आयाम।

2 अंतर्निहित .Keys और .Items आदेश दिए .Items हैं।

3 .CompareMode द्वारा निर्धारित संपत्ति।

किसी संग्रह में आइटम जोड़ना

आइटम एक से जुड़ जाते हैं Collection अपने फोन करके .Add विधि:

वाक्य - विन्यास:

.Add(item, [key], [before, after])
पैरामीटर विवरण
मद Collection में संग्रहीत करने के लिए आइटम। यह अनिवार्य रूप से कोई भी मूल्य हो सकता है जिसे एक चर को सौंपा जा सकता है, जिसमें आदिम प्रकार, सरणियाँ, ऑब्जेक्ट और Nothing
चाभी वैकल्पिक। एक String जो Collection से आइटम प्राप्त करने के लिए एक अद्वितीय पहचानकर्ता के रूप में कार्य करता है। यदि Collection में निर्दिष्ट कुंजी पहले से मौजूद है, तो यह रन-टाइम त्रुटि 457 में परिणाम देगा: "यह कुंजी पहले से ही इस संग्रह के एक तत्व के साथ जुड़ा हुआ है"।
इससे पहले वैकल्पिक। Collection में आइटम डालने से पहले एक मौजूदा कुंजी ( String मान) या इंडेक्स (संख्यात्मक मूल्य)। यदि कोई मान दिया जाता है, तो आफ्टर पैरामीटर खाली होना चाहिए या रन-टाइम त्रुटि 5: "अमान्य प्रक्रिया कॉल या तर्क" परिणाम देगा। यदि String कुंजी पारित की जाती है जो Collection में मौजूद नहीं है, तो एक रन-टाइम त्रुटि 5: "अमान्य प्रक्रिया कॉल या तर्क" परिणाम देगा। यदि कोई सांख्यिक सूचकांक पारित हो जाता है जो Collection में मौजूद नहीं है, तो एक रन-टाइम त्रुटि 9: "सीमा से बाहर सदस्यता" का परिणाम होगा।
उपरांत वैकल्पिक। Collection में आइटम डालने के लिए एक मौजूदा कुंजी ( String मान) या इंडेक्स (संख्यात्मक मान)। यदि कोई मान दिया जाता है, तो पहले वाला पैरामीटर खाली होना चाहिए। उठाए गए त्रुटियाँ पहले पैरामीटर के समान हैं।

टिप्पणियाँ:

  • कुंजी केस-संवेदी नहीं हैं। .Add "Bar", "Foo" और .Add "Bar", "Foo" .Add "Baz", "foo" परिणामस्वरूप महत्वपूर्ण टकराव होगा।

  • यदि पैरामीटर से पहले या बाद में वैकल्पिक में से कोई भी नहीं दिया गया है, तो आइटम को Collection में अंतिम आइटम के बाद जोड़ा जाएगा।

  • पहले या बाद के पैरामीटर को निर्दिष्ट करके किए गए सम्मिलन मौजूदा सदस्यों के संख्यात्मक सूचकांक को नई स्थिति से मिलान करने के लिए बदल देंगे। इसका मतलब यह है कि संख्यात्मक सूचकांक का उपयोग करते हुए छोरों में सम्मिलन बनाते समय देखभाल की जानी चाहिए।


नमूना उपयोग:

Public Sub Example()
    Dim foo As New Collection
    
    With foo
        .Add "One"            'No key. This item can only be retrieved by index.
        .Add "Two", "Second"  'Key given. Can be retrieved by key or index.
        .Add "Three", , 1     'Inserted at the start of the collection.
        .Add "Four", , , 1    'Inserted at index 2.
    End With
    
    Dim member As Variant
    For Each member In foo
        Debug.Print member    'Prints "Three, Four, One, Two"
    Next
End Sub

संग्रह से आइटम निकालना

आइटम एक से निकाल दिए जाते Collection अपने फोन करके .Remove विधि:

वाक्य - विन्यास:

.Remove(index)
पैरामीटर विवरण
सूची Collection से निकालने के लिए आइटम। यदि दिया गया मान एक संख्यात्मक प्रकार है या संख्यात्मक उप-प्रकार वाला Variant , तो इसे एक संख्यात्मक सूचकांक के रूप में व्याख्या किया जाएगा। यदि दिया गया मान String या String Variant , तो इसे एक कुंजी के रूप में व्याख्या किया जाएगा। यदि स्ट्रिंग कुंजी पारित की जाती है जो Collection में मौजूद नहीं है, तो एक रन-टाइम त्रुटि 5: "अमान्य प्रक्रिया कॉल या तर्क" परिणाम देगा। यदि कोई सांख्यिक सूचकांक पारित हो जाता है जो Collection में मौजूद नहीं है, तो एक रन-टाइम त्रुटि 9: "सीमा से बाहर सदस्यता" का परिणाम होगा।

टिप्पणियाँ:

  • एक से एक आइटम निकाल रहा है Collection में यह सभी आइटमों के बाद का सांख्यिक अनुक्रमित बदल जाएगा CollectionFor छोरों कि सांख्यिक अनुक्रमित और आइटम निकालें का उपयोग पीछे की ओर चलाना चाहिए ( Step -1 ) सबस्क्रिप्ट अपवाद रोकने के लिए और आइटम को छोड़ दिया है।
  • आइटम आमतौर पर For Each लूप के अंदर से एक Collection से हटाया नहीं जाना चाहिए क्योंकि यह अप्रत्याशित परिणाम दे सकता है।

नमूना उपयोग:

Public Sub Example()
    Dim foo As New Collection
    
    With foo
        .Add "One"
        .Add "Two", "Second"
        .Add "Three"
        .Add "Four"
    End With
     
    foo.Remove 1            'Removes the first item.
    foo.Remove "Second"     'Removes the item with key "Second".
    foo.Remove foo.Count    'Removes the last item.
    
    Dim member As Variant
    For Each member In foo
        Debug.Print member  'Prints "Three"
    Next
End Sub

एक संग्रह की आइटम गणना हो रही है

एक में आइटमों की संख्या Collection अपने फोन करके प्राप्त किया जा सकता .Count समारोह:

वाक्य - विन्यास:

.Count()

नमूना उपयोग:

Public Sub Example()
    Dim foo As New Collection
    
    With foo
        .Add "One"
        .Add "Two"
        .Add "Three"
        .Add "Four"
    End With
     
    Debug.Print foo.Count   'Prints 4
End Sub

संग्रह से आइटम पुनर्प्राप्त करना

आइटम्स को .Item फ़ंक्शन को कॉल करके Collection से पुनर्प्राप्त किया जा सकता है।

वाक्य - विन्यास:

.Item(index)
पैरामीटर विवरण
सूची Collection से पुनर्प्राप्त करने के लिए आइटम। यदि दिया गया मान एक संख्यात्मक प्रकार है या संख्यात्मक उप-प्रकार वाला Variant , तो इसे एक संख्यात्मक सूचकांक के रूप में व्याख्या किया जाएगा। यदि दिया गया मान String या String Variant , तो इसे एक कुंजी के रूप में व्याख्या किया जाएगा। यदि स्ट्रिंग कुंजी पारित की जाती है जो Collection में मौजूद नहीं है, तो एक रन-टाइम त्रुटि 5: "अमान्य प्रक्रिया कॉल या तर्क" परिणाम देगा। यदि कोई सांख्यिक सूचकांक पारित हो जाता है जो Collection में मौजूद नहीं है, तो एक रन-टाइम त्रुटि 9: "सीमा से बाहर सदस्यता" का परिणाम होगा।

टिप्पणियाँ:

  • .Item के डिफ़ॉल्ट सदस्य है Collection । यह नीचे दिए गए नमूना उपयोग में दिखाए गए अनुसार सिंटैक्स में लचीलापन देता है।
  • न्यूमेरिक इंडेक्स 1-आधारित होते हैं।
  • कुंजी केस-संवेदी नहीं हैं। .Item("Foo") और .Item("foo") एक ही कुंजी को संदर्भित करते हैं।
  • इंडेक्स पैरामीटर को String या वीज़ा-वर्सा से किसी संख्या में नहीं डाला जाता है। यह पूरी तरह से संभव है कि। .Item(1) और .Item("1") Collection विभिन्न मदों को देखें।

नमूना उपयोग (अनुक्रमित):

Public Sub Example()
    Dim foo As New Collection
    
    With foo
        .Add "One"
        .Add "Two"
        .Add "Three"
        .Add "Four"
    End With
     
    Dim index As Long
    For index = 1 To foo.Count
        Debug.Print foo.Item(index) 'Prints One, Two, Three, Four
    Next
End Sub

नमूना उपयोग (कुंजी):

Public Sub Example()
    Dim keys() As String
    keys = Split("Foo,Bar,Baz", ",")
    Dim values() As String
    values = Split("One,Two,Three", ",")
        
    Dim foo As New Collection
    Dim index As Long
    For index = LBound(values) To UBound(values)
        foo.Add values(index), keys(index)
    Next
     
    Debug.Print foo.Item("Bar") 'Prints "Two"
End Sub

नमूना उपयोग (वैकल्पिक सिंटैक्स):

Public Sub Example()
    Dim foo As New Collection
    
    With foo
        .Add "One", "Foo"
        .Add "Two", "Bar"
        .Add "Three", "Baz"
    End With
    
    'All lines below print "Two"
    Debug.Print foo.Item("Bar")     'Explicit call syntax.
    Debug.Print foo("Bar")          'Default member call syntax.
    Debug.Print foo!Bar             'Bang syntax.
End Sub

ध्यान दें कि धमाके ( ! ) वाक्य रचना की अनुमति है क्योंकि .Item डिफ़ॉल्ट सदस्य है और एक भी ले जा सकते हैं String तर्क। इस वाक्य रचना की उपयोगिता संदिग्ध है।

यदि संग्रह में कोई कुंजी या आइटम मौजूद है, तो यह निर्धारित करना

चांबियाँ

Scripting.Dictionary के विपरीत, एक Collection यह निर्धारित करने के लिए एक विधि नहीं है कि क्या कोई कुंजी मौजूद है या Collection में मौजूद कुंजियों को पुनः प्राप्त करने का एक तरीका है। यह निर्धारित करने का एकमात्र तरीका है कि क्या कुंजी मौजूद है, त्रुटि हैंडलर का उपयोग करें:

Public Function KeyExistsInCollection(ByVal key As String, _
                                      ByRef container As Collection) As Boolean
    With Err
        If container Is Nothing Then .Raise 91
        On Error Resume Next
        Dim temp As Variant
        temp = container.Item(key)
        On Error GoTo 0

        If .Number = 0 Then
            KeyExistsInCollection = True 
        ElseIf .Number <> 5 Then
            .Raise .Number
        End If
    End With
End Function

आइटम

यह निर्धारित करने का एकमात्र तरीका है कि किसी आइटम को किसी Collection में समाहित किया गया है या आइटम के Collection तक Collection पर पुनरावृति करना है। ध्यान दें कि क्योंकि Collection में आदिम या ऑब्जेक्ट हो सकते हैं, तुलना के दौरान रन-टाइम त्रुटियों से बचने के लिए कुछ अतिरिक्त हैंडलिंग की आवश्यकता होती है:

Public Function ItemExistsInCollection(ByRef target As Variant, _
                                       ByRef container As Collection) As Boolean
    Dim candidate As Variant
    Dim found As Boolean
    
    For Each candidate In container
        Select Case True
            Case IsObject(candidate) And IsObject(target)
                found = candidate Is target
            Case IsObject(candidate), IsObject(target)
                found = False
            Case Else
                found = (candidate = target)
        End Select
        If found Then
            ItemExistsInCollection = True
            Exit Function
        End If
    Next
End Function

एक संग्रह से सभी आइटम समाशोधन

एक Collection से सभी वस्तुओं को साफ करने का सबसे आसान तरीका है कि इसे बस एक नए Collection साथ बदल दिया जाए और पुराने को दायरे से बाहर जाने दें:

Public Sub Example()
    Dim foo As New Collection
    
    With foo
        .Add "One"
        .Add "Two"
        .Add "Three"
    End With
     
    Debug.Print foo.Count   'Prints 3
    Set foo = New Collection
    Debug.Print foo.Count   'Prints 0
End Sub

हालाँकि, अगर Collection लिए कई संदर्भ हैं, तो यह विधि आपको केवल उस चर के लिए एक खाली Collection देगी जो असाइन किया गया है

Public Sub Example()
    Dim foo As New Collection
    Dim bar As Collection
    
    With foo
        .Add "One"
        .Add "Two"
        .Add "Three"
    End With
     
    Set bar = foo
    Set foo = New Collection
    
    Debug.Print foo.Count   'Prints 0
    Debug.Print bar.Count   'Prints 3
End Sub

इस मामले में, सामग्री को खाली करने का सबसे आसान तरीका Collection में मदों की संख्या के माध्यम से लूपिंग है और बार-बार सबसे कम आइटम को हटा दें:

Public Sub ClearCollection(ByRef container As Collection)
    Dim index As Long
    For index = 1 To container.Count
        container.Remove 1
    Next
End Sub


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow