VBA-我可以卸载堆栈调用以避免运行时28“;“堆栈空间不足”;错误

VBA-我可以卸载堆栈调用以避免运行时28“;“堆栈空间不足”;错误,vba,ms-word,Vba,Ms Word,我正在从事一个使用VBA用户表单帮助用户创建不同Word文档的项目。其中一个要求是用户能够在用户表单之间来回切换 这个最新的文档比以前的文档有更多的用户表单(31个左右),我发现我可以通过填充大多数表单,然后导航回第一个表单,然后再次前进,触发运行时错误28“超出堆栈空间” 当继续进行时,我所做的与第一次没有什么不同,因此我确实相信,由于调用数量的限制,它确实超出了堆栈空间,而不是递归或Microsoft文档中列出的其他问题 为了记录在案,我在返回或前进时卸载表单。例如: Private Sub

我正在从事一个使用VBA用户表单帮助用户创建不同Word文档的项目。其中一个要求是用户能够在用户表单之间来回切换

这个最新的文档比以前的文档有更多的用户表单(31个左右),我发现我可以通过填充大多数表单,然后导航回第一个表单,然后再次前进,触发运行时错误28“超出堆栈空间”

当继续进行时,我所做的与第一次没有什么不同,因此我确实相信,由于调用数量的限制,它确实超出了堆栈空间,而不是递归或Microsoft文档中列出的其他问题

为了记录在案,我在返回或前进时卸载表单。例如:

Private Sub cb_back_Click() 'backward navigation 

    Unload Me
    showPreviousForm 

End Sub
我的问题是,在VBA中,是否有一种方法可以从堆栈中“卸载”调用

用户不太可能像我那样做,所以我不太关心项目的这一部分,但我想知道项目的其他部分是否更接近极限

提前谢谢

“卸载”堆栈帧的唯一方法是从该堆栈帧返回。。。或者把一切都炸毁

我不认为您的
卸载我
做了您认为它做的事情,即使它确实按预期工作,也不会帮助您处理调用堆栈

问题在于调用
showPreviousForm
而不是返回调用者:当显示“previous form”时,直到它关闭并执行到
End Sub
,然后调用堆栈跟踪
cb_back_Click()
中的该位置,直到调用堆栈展开,它会留在原地

您可以使用调用堆栈调试工具窗口观察此行为

在VBA中没有访问调用堆栈的编程方法。任何试图报告堆栈跟踪以进行错误报告的人都希望这是可能的


解决方案是不要
卸载我
,而是在表单实例上存储一些状态,告诉调用者下一步要去哪里;当点击
End Sub
时,调用方可以查看该状态值并确定要执行的操作。

谢谢。我确实意识到卸载我对调用堆栈没有帮助。(我试图避免像“卸载用户表单”这样的回答。)但你已经为我指明了一个方向,我可以在未来采取这一点。我只需要弄清楚如何让userform关闭,让所有sub都完成。我已经存储了足够的数据来确定状态,所以应该不会太难。