मैं वीबीए में 2 डी सरणी में वैकल्पिक तत्व कैसे जोड़ सकता हूं? कार्य उदाहरण:

sub test
   Dim arr As Variant, ix as variant
   arr = Array( _
   Array("01probe", 1, 2, True), _
   Array("02datum", 3, 4) _
  )
  '... lots more
  ' true optional, nothing or just "false" as alternative

  For Each ix In arr
   Debug.Print ix(3) '<---- index out of range
  Next ix
end sub

सबको शुक्रीया

-1
Timo 27 अगस्त 2020, 10:41

2 जवाब

सबसे बढ़िया उत्तर

आपकी सरणी 2D प्रकार नहीं है। यह सरणी की एक सरणी है (एक जंजीर सरणी) ...

लेकिन मैं कल्पना नहीं कर सकता कि वैकल्पिक पैरामीटर क्यों आवश्यक होगा।

यदि आपकी सरणी As Variant घोषित की गई है, तो यह किसी भी प्रकार के चर, वस्तुओं को शामिल कर सकती है। इसके आयामों को घोषित करना आवश्यक नहीं है, न ही। सब कुछ माना जा सकता है Optional...

कृपया अगला कोड देखें:

Sub testOptionalArray()
 Dim arr As Variant, dbInteger As Integer, strProbeNr As Long, rng As Range
 Dim rng2 As Range, dbDate As Date, dDate As Date
 
  dbInteger = 11: strProbeNr = 1000: dbDate = Date + 1: dDate = Now
  Set rng = Range("A1:A2"): Set rng2 = Range("B1:B2")
  arr = Array( _
        Array("01probe", dbInteger, strProbeNr, rng), _
        Array("02datum", dbDate, dDate, rng2))
        
  Debug.Print arr(0)(1), arr(0)(3).cells(1, 1).value
  Debug.Print arr(1)(1), arr(1)(UBound(arr(1))).cells.count, arr(1)(UBound(arr(1))).Address
End Sub

संपादित, आपके द्वारा एक त्रुटि लौटाते हुए अपना कोड पोस्ट करने के बाद:

चर्चा में कोड को अगले तरीके से समझना होगा। सबसे पहले, हमेशा सभी चरों को उचित रूप से घोषित करना एक अच्छी आदत होगी...

Sub testJaggedArray()
Dim arr As Variant, ix As Variant
   arr = Array( _
   Array("01probe", 1, 2, True), _
   Array("02datum", 3, 4))
  'The above array must be understood like an array of two arrays, 
  'first of them having 4 elements (ubound = 4, because it starts from 0)
  ' and a second one with only 3 elements.

  For Each ix In arr
   'When your code tries to print the fourth element of an array with only 
   'three elements, of course VBA return 'subscript out of range'.
   Debug.Print ix(3) '<---- subscript out of range
  Next ix
  'You can return an element of an array inside a jagged array in this way:
   Debug.Print arr(1)(ubound(arr(1)))' which means returning of the last element
                                     ' of the second array without returning an error
  'You may use an array of two arrays having different number of element, 
  'but you cannot expect to an array to return an INEXISTENT item.
  'There is no any connection between an hypothetical need of OPTIONAL element.
  'It is only a matter of EXISTING element...
End Sub
1
FaneDuru 27 अगस्त 2020, 19:59

FaneDuru की मदद से मुझे बिना किसी त्रुटि के विभिन्न आंतरिक सरणी आकारों के साथ एक सरणी को लूप करने का समाधान मिला:

sub test
Dim arr As Variant, i as integer
arr = Array( _
Array("01probe", 1, 2, True), _
Array("02datum", 3, 4) _
)

'... lots more

 For i = LBound(arr) To UBound(arr)
    Debug.Print (arr(i)(UBound(arr(i))))
Next i
end sub
0
Timo 28 अगस्त 2020, 09:46