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
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:
arr2 = aaa
set one array equal to the other (no set keyword as not object). Do not dimension arr2
first.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
Option Explicit
and declare all your variablesSelect 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
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments