1
Public Sub DoSomeThing()
    Dim dict As Object
    Dim arr2(5)
    Set arr2() = aaa()

   For m = LBound(arr2) To UBound(arr2)
        Set dict = aaa()(m)
        Dim key As Variant
       For Each key In dict.Keys
           Debug.Print dict(key)
       Next key
  Next
End Sub

Public Function aaa() As Variant
    Dim arr(5)
   Dim dict_123 As Object
   For k = 1 To 2
       If k = 1 Then
           val1 = 300
           val2 = 500
       ElseIf k = 2 Then
           val1 = 600
           val2 = 1200
      End If
       Set dict_123 = CreateObject("Scripting.Dictionary")
       dict_123.Add "first", val1
       dict_123.Add "Second", val2
       Set arr(k) = dict_123
   Next
  aaa = arr
End Function

Here I want to get return the Array from aaa to the DoSomething and process that array from DoSomeThing. How can I do that?

I am getting the error as can't assign to Array

1 Answer 1

2

There are a lot of errors and I am not sure of what you are trying to achieve overall. Your code above "fixed" below.

Notes:

  1. arr2 = aaa set one array equal to the other (no set keyword as not object). Do not dimension arr2 first.
  2. Test if current array (arr2) item is a dictionary before attempting the set. You have only added dictionaries at index 1 and 2 in the 0 based array. Less robust would be If m = 1 Or m = 2
  3. Use Option Explicit and declare all your variables
  4. I prefer a Select Case in the function to If statement particularly if you want to add more conditions where you may want the same result for more than one condition.

Code:

Option Explicit

Public Sub DoSomeThing()
    Dim dict As Object, arr2, m As Long, key As Variant
    arr2 = aaa  '<==Set one array equal to the other (no set keyword as not object)

    For m = LBound(arr2) To UBound(arr2)
       If TypeName(arr2(m)) = "Dictionary"  ' <== We can test if current array item is a dictionary before attempting the set. You have only added dictionaries at position 1 and 2 in the array. Less robust would be If m = 1 Or m = 2
            Set dict = arr2(m)   '<==index into your arr2 array
            For Each key In dict.Keys
                Debug.Print dict(key)
            Next key
        End If
    Next
End Sub

Public Function aaa() As Variant
   Dim arr(5), k As Long, val1 As Long, val2 As Long, dict_123 As Object
   For k = 1 To 2
       Select Case k '<== Use select statement 
       Case 1
           val1 = 300
           val2 = 500
       Case 2
           val1 = 600
           val2 = 1200
      End Select
      Set dict_123 = CreateObject("Scripting.Dictionary")
      dict_123.Add "first", val1
      dict_123.Add "Second", val2
      Set arr(k) = dict_123 'K starts at 1 so position 0 is empty; as are positions after 2.
   Next k
   aaa = arr

End Function
Sign up to request clarification or add additional context in comments.

1 Comment

@Sorry for the mistakes, I actually tried without option Explicit, so I am not faced many errors,.....Thanks for the detailed help....

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.