खोज…
टिप्पणियों
एक 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
में यह सभी आइटमों के बाद का सांख्यिक अनुक्रमित बदल जाएगाCollection
।For
छोरों कि सांख्यिक अनुक्रमित और आइटम निकालें का उपयोग पीछे की ओर चलाना चाहिए (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