超出堆栈空间问题 - 我可以重复一个Sub而不会递归吗?

时间:2016-02-22 21:38:53

标签: excel vba recursion stack-overflow

我正在制作一款有趣的Excel项目。它运行得很完美,但是在大约一分钟的运行时间之后它会出错,因为它没有堆栈空间。我意识到这是因为技术上我在stepEvent函数中使用了递归,如下所示:

Private Sub stepEvent()
    ' All the game code
    start = Timer
    Do While Timer < start + 0.15
        DoEvents
    Loop
    stepEvent
End Sub

stepEvent的所有实例都没有解决,直到玩家输了,或者用完了堆栈空间和错误。我的问题是,是否有办法解决递归的潜艇,但不知何故保留控制,或者如果有另一种方法重复该子而不使用递归。

1 个答案:

答案 0 :(得分:1)

尝试循环

Sub asDoWhileLoop()

   Do While True
       Call stepEvent
   Loop

End Sub

Sub stepEvent()

    'Do game stuff and wait at end

End Sub

但请记住在stepEvent()的末尾清理,即将对象设置为NOTHING,关闭记录集,无论你正在玩什么。您可以使用END而不是EXIT SUB退出。但是,你应该确保它终止。