Используя этот простой тест ниже для рекурсивной функции, чтобы понять, почему функция не возвращает ожидаемое значение должным образом. здесь вызывается процедура.Рекурсивная функция VBA не возвращается должным образом
Public Sub TestRecursive()
m_count = 0
Debug.Print Recursive
End Sub
Рекурсивная функция.
Private Function Recursive() As String
Recursive = "start"
m_count = m_count + 1
If m_count < 5 Then
'Debug.Print "counting " & CStr(m_count)
Recursive
Else
'Debug.Print "ended count "
Recursive = "ended"
Exit Function
End If
'Debug.Print "should never reach here"
End Function
Не уверен, что происходит, но функция рекурсивная возвращает «начало» вместо «завершено». Любая идея или предложение, что происходит?
Спасибо, что представленное решение возвращает правильное значение сейчас. Добавление некоторых заявлений Debug.Print, рекурсивные процедуры продолжают называть себя после функции выхода подсчета 1 подсчета 2 подсчета 3 подсчета 4 закончился подсчета на 5 ** никогда не должно достичь здесь-** не ** должен не достичь здесь 5 ** ** никогда не должен доходить здесь 5 ** ** не должен доходить здесь 5 ** закончился. любая идея почему? – edbeck
Рад знать, что решения обеспечивают правильные значения. Ответ Криса намного лучше, чем мой, поскольку он избегает использования глобальных переменных. Если вы чувствуете, что любой ответ дал вам желаемое решение, пожалуйста, не стесняйтесь отмечать один ответ, как принято, чтобы ближе подойти к вашему вопросу. – zedfoxus