У меня возникла проблема с фактическим переполнением стека в моем коде VBA.
Я пытаюсь выяснить, как обрабатывать ошибки VBA.
Я создал тестовую подпрограмму, чтобы помочь выяснить это.
У меня есть сообщение об ошибке GoTo Error_Handle
Я хочу, если Err.Number = 13 Начать сначала, а не возобновить следующее.
Если я попытаюсь l oop GoTo Start_Over_Label :, на втором проходе ошибка по-прежнему выдается.
Если я попытаюсь l oop снова вызвать сабвуфер, я получу ошибку переполнения стека.
Есть ли какой-то способ l oop в сабвуфере, не выбрасывая ошибку или не поглощая стек вызовов?
Может быть, есть способ возобновить следующее, но запустить саб снова?
Я чувствую, что решение есть, но мне его не хватает.
Заранее спасибо
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