2016-03-11 2 views
0

В приведенном ниже коде Errorhandler правильно выполняет первую ошибку при вводе книги, которая не является открытой или какой-либо случайной строкой. Но когда я нажимаю на повтор и снова вводим случайное имя, я получаю «Subscript out of Range» error @ Workbooks (workbookname). Активировать.Обработка ошибок VBA Excel не работает для второй ошибки

Может ли кто-нибудь помочь мне, почему это происходит, и как я могу заставить его работать. Я много пробовал. Но ничего не работает. Этот код является частью более крупной программы.

Sub test() 

Dim workbkname As String 
On Error GoTo Errorhandler 
Retry: 

workbookname = InputBox("Enter workbook name:", _ 
         "Name Enrty") 
If StrPtr(workbookname) = 0 Then 
    MsgBox ("Aborting Program") 
    End 
End If 

Workbooks(workbookname).Activate 
Exit Sub 

Errorhandler: 
Response = MsgBox("Workbook " & workbookname & " not found", vbRetryCancel) 
If Response = 4 Then 
    GoTo Retry 

End If 

End Sub 
+2

Используйте 'Resume Retry' вместо' GoTo Retry' –

ответ

1

Вопрос здесь заключается в том, что VBA Обработчик ошибок не исправить эту ошибку однажды дал директиву как GoTo. В результате код считает, что он обнаружил ошибку в вашей процедуре обработки ошибок и, таким образом, выдает ошибку в стек.

Чтобы исправить эту ошибку, необходимо либо позвонить Resume с местом для возобновления (либо в одиночку Resume запустить ошибочный код еще раз, Resume Next возобновить строку кода следующей ошибки или Resume можно назвать с последующим этикетка, как показано ниже:.

Sub ErrTest 
    On Error Goto ErrHndl 
    For i = 0 to 5 
     a = 1/i 
nextiLabel: 
    Next i 

    Exit Sub 
ErrHndl: 
    Resume nextiLabel 
End Sub 

Вы также можете использовать Err.Clear(), чтобы устранить ошибку, но это менее рекомендуемое

для получения дополнительной информации см здесь: Error Handling in Excel

Смежные вопросы