【发布时间】:2020-05-31 22:42:18
【问题描述】:
我的 VBA 代码中的实际堆栈溢出存在问题。
我正在尝试找出 VBA 错误处理。
我做了一个测试子来帮助解决这个问题。
我有一个 On Error GoTo Error_Handle
如果 Err.Number = 13 则重新开始,而不是 Resume Next。
如果我尝试循环 GoTo Start_Over_Label:,在第二次传递时仍然会抛出错误。
如果我尝试再次循环调用 sub,我会收到堆栈溢出错误。
有什么方法可以在 Sub 中循环,而不会引发错误或占用调用堆栈?
也许有办法 Resume Next,但重新启动 Sub?
我觉得有一个解决方案,但我想念它。
提前谢谢你
Private My_Long As Long
Private My_Err_Counter As Long
Private Function My_Timer(My_Delay As Long)
Dim My_Timer_Counter As Long
While My_Timer_Counter <= My_Delay
DoEvents
My_Timer_Counter = My_Timer_Counter + 1
Wend
End Function
Sub My_Error_Test()
My_Start_Over:
On Error GoTo My_Error_Handle
My_Timer (200)
My_Long = "as"
MsgBox My_Long
My_Error_Handle:
Debug.Print "Err Num: " & Err.Number & " - " & Err.Description
Debug.Print My_Err_Counter
My_Err_Counter = My_Err_Counter + 1
If Err.Number = 13 Then
Err.Clear
GoTo My_Start_Over
End If
End Sub
【问题讨论】:
-
doevents如果使用不当,经常会通过递归到事件处理程序中导致堆栈溢出。另一件事是recusion本身,但它需要很多级别。您可以计算的最小堆栈是 1 MB 的存储空间。
标签: vba