Вы можете сделать это sh с помощью рекурсии, но это излишне сложно. Как правило, вы должны использовать рекурсию через итерацию только тогда, когда рекурсивные алгоритмы намного легче читать и писать. В противном случае вы должны использовать итерацию из-за возможной ошибки в стеке потока при использовании рекурсии. При этом, вот решение с использованием рекурсии. Я немного изменил ваш код, чтобы он работал как с использованием рекурсии, так и перебирал возвращаемый объект коллекции.:
Function AddArrToObj(ByRef arr As Variant, ByRef obj As Object, Optional ByVal i As Integer = 0)
If obj Is Nothing And i <> 0 Then
Set obj = New Collection
End If
For i = LBound(arr) To UBound(arr)
Select Case VBA.TypeName(obj)
Case "Collection"
obj.Add arr(i)
Case "Dictionary"
obj.Add i + 1 & " " & arr(i), arr(i)
Case "Nothing"
Set obj = AddArrToObj(arr, obj, 1) 'Recursion
Exit For
End Select
Next i
Set AddArrToObj = obj
End Function
Public Sub TestSO()
Dim collA As VBA.Collection
Dim cmdStr As String
Dim arr() As String
Dim obj As Object
Dim elem As Variant
cmdStr = "StackOverflow is a website."
arr = VBA.Split(cmdStr, " ")
Set obj = AddArrToObj(arr, collA)
For Each elem In obj
Debug.Print elem
Next elem
End Sub