2015-08-23 6 views
6

मैं सरणियों की एक सरणी arrAggregatedArrays(1 to 8)मैं तर्क के रूप में एक सरणी (सरणी के भीतर) क्यों नहीं पारित कर सकता हूं?

मैं इस तरह एक उप कॉल कर सकते हैं है:

call sub(ArrNewClient) 

लेकिन मैं एक संकलन त्रुटि मिलती है:

call sub(arrAggregatedArrays(1)) 
: "प्रकार बेमेल" अगर मैं यह कोशिश

क्यों? और क्या इसके चारों ओर एक रास्ता है?

और यह arrAggregatedArrays(1) को एक सरणी के रूप में क्यों नहीं पहचानता है, भले ही यह UBound जैसे सामान्य कार्यों की तरह कार्य करेगा?

Public arrAggregatedArrays()  As Variant  '/ Holds all the sheet-Data Arrays 

'/ एक अलग मॉड्यूल

 ReDim arrAggregatedArrays(1 To 8) 
      arrAggregatedArrays(1) = arrNewClient 
      arrAggregatedArrays(2) = arrExistingClient 
      arrAggregatedArrays(3) = arrGroupSchemes 
      arrAggregatedArrays(4) = arrOther 
      arrAggregatedArrays(5) = arrMcOngoing 
      arrAggregatedArrays(6) = arrJhOngoing 
      arrAggregatedArrays(7) = arrAegonQuilterArc 
      arrAggregatedArrays(8) = arrAscentric 

     Call FilterSheetArrayForColumns(arrAggregatedArrays(1)) 

Public Sub FilterSheetArrayForColumns(ByRef arrCurrentArray() As Variant) 

और एक स्क्रीनशॉट में घोषित: Compile Error

+0

आपको हमें अपनी घोषणाएं दिखाने की आवश्यकता है और यह चर कैसे प्रारंभ किया गया है। – RBarryYoung

+0

माफी, विवरण जोड़ा गया। – Kaz

+0

@Zak - अब हमें केवल 'फ़िल्टरशीटएरेरेफोर कॉलम() 'के लिए अपनी फ़ंक्शन घोषणा देखने की आवश्यकता है। मेरा अनुमान है कि आप इसे 'ए ए वेरिएंट' के बजाय 'a() Variant' के रूप में प्राप्त कर रहे हैं। वेरिएंट विशेष हैं। एक सरणी का प्रतिनिधित्व करने के लिए चर का उपयोग स्वयं ही किया जा सकता है। – Bond

उत्तर

6

आप दो तरीकों में से एक में एक Variant सरणी बना सकते हैं:

Dim v1() As Variant 
Dim v2: v2 = Array() 
पूर्व के साथ

, आप एक सबरूटीन के रूप में सरणी प्राप्त v1() नोटेशन का उपयोग कर पैरामीटर, जैसे वीबीए में किसी अन्य डेटा प्रकार सरणी के साथ। उत्तरार्द्ध के साथ, आपको सरणी नोटेशन के बिना इसे सामान्य चर के रूप में प्राप्त करने की आवश्यकता होगी।

वेरिएंट विशेष हैं क्योंकि वे सरणी प्रकार सहित कई प्रकार के हो सकते हैं, यही कारण है कि v = Array() सिंटैक्स काम करता है। इस तरह से किया जाने पर, उन्हें किसी भी अन्य चर की तरह माना जाना चाहिए और subroutines के अंदर और बाहर इस तरह से पारित किया जाना चाहिए।

+0

धन्यवाद।क्या आप समझा सकते हैं कि कार्यक्रम कैसे/कैसे 'सरणी' और 'सरणी()' एक-दूसरे से अलग हैं, इस पर प्रोग्राम कैसे उन्हें समझता/संचालित करता है? – Kaz

+0

मैं शामिल अंतर्निहित अवधारणाओं को समझना चाहता हूं। – Kaz

+0

और यदि मैं 'सरणी') की अपेक्षा वाले फ़ंक्शन में 'सरणी' पास नहीं कर सकता हूं, तो इसका अर्थ यह भी है कि मैं 'array 'की अपेक्षा वाले फ़ंक्शन में' सरणी()' पास नहीं कर सकता? – Kaz

1

टिप्पणी में उल्लेख किया है, आप कार्यान्वयन प्रयोग कर रहे हैं के बारे में अधिक दिखाने की जरूरत है। यह मेरे लिए काम करता है।

Sub arr_test() 
    Dim arr As Variant 

    arr = Array(Array(1, 2, 3), Array(2, 3, 4), _ 
       Array(3, 4, 5), Array(4, 5, 6)) 

    Debug.Print LBound(arr, 1) & ":" & UBound(arr, 1) 
    Debug.Print LBound(arr(1), 1) & ":" & UBound(arr(1), 1) 

    Call arr_sub(arr) 
    Call arr_sub(arr(1)) 

End Sub 

Sub arr_sub(tarr As Variant) 
    Debug.Print "arr_sub - "; LBound(tarr, 1) & ":" & UBound(tarr, 1) 
End Sub 
तत्काल खिड़की से

परिणाम:

arr_test 
0:3 
0:2 
arr_sub - 0:3 
arr_sub - 0:2 
+0

माफी, विवरण जोड़ा गया। – Kaz

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

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