【发布时间】:2020-04-28 14:10:05
【问题描述】:
为什么这个函数不退出?我已经尝试过 Exit Function 和 Exit For。在我到达 Ubound(arr) 语句后,我重置为 i = 0 并且调用堆栈恢复到 End Select 语句,此后 For 循环再次开始。这一定来自我执行的递归行?
Function AddArrToObj(ByRef arr As Variant, ByRef obj As Object, Optional ByVal i As Integer = 0)
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 = New VBA.Collection
Call AddArrToObj(arr, obj) 'Recursion
End Select
'Add Watch for i = 3 break on True
'Why does this function not exit appropriately?
If Not IsEmpty(obj) And i = UBound(arr) Then Exit Function
Next i
End Function
Public Sub TestSO()
Dim collA As VBA.Collection
Dim cmdStr As String
cmdStr = "StackOverflow is a website."
arr = VBA.Split(cmdStr, " ")
Call AddArrToObj(arr, collA)
End Sub
【问题讨论】:
-
If Not obj is Nothing And...
标签: vba recursion pass-by-reference