2015-10-14 2 views
1

У меня возникли проблемы с обработкой ошибок в VBA excel. Basicaly, у меня есть ситуация, когда я имею дело с несколькими ошибками в одном блоке обработки ошибок.excel vba обработка ошибок

Чтобы сделать вещи действительно просто давайте просто скажем:

Sub some_function() 
    On Error go to step1 
    step2: 
     some code which triggers an error 
     Exit Sub 
    step1: 
     Okay, so far so good. 
     Problem is, that in this block of code can also occur an error 
     with the same Err.Number but I have to deal with him on other way 
     which is not specified in this block of code. 
     go to step 2 
End sub 

Я использую SAP сеанса для подключения к SAPgui и я не могу предсказать, произойдет ошибка. Если я могу поймать ошибку в блоке обработки ошибок кода, я могу решить эту ситуацию.

Так что я практически ослеплен. Если возникает ошибка, я пытаюсь выполнить некоторые другие действия, и если она работает нормально, но если во второй раз (в блоке обработки ошибок) возникает ошибка, это вызовет ошибку.

Есть ли проход?

UPDATE:

просто мысли вслух.

Если я использую On Error Resume следующего оператора и выполните следующие действия:

On Error Resume next 
some code, 
line of code that could trigger an error 
if Err.Number <> 0 Then 
    try to handle an error 
    Err.Clear 
End if 
line of code that could also trigger an error 
If Err.Number <> 0 Then 
    Try to handle an error 
    Err.Clear 
End If 

Будет ли это хорошо? или есть ли лучшее решение?

Возможно ли использовать следующую инструкцию в процедуре только в определенном блоке кода? Давайте просто скажем, что у нас есть процедура с 20 строками, и я бы хотел использовать оператор Resume Next между 10-й и 15-й строками. Можно ли включить или отключить оператор Resume next или строку Error?

+0

так, как только вы проверите err.Number, почему бы не Err.Clear, чтобы вы могли поймать следующий? – Sorceri

+0

Как правило, не рекомендуется, чтобы ваш блок обработки ошибок потенциально терпел неудачу и должен был поймать ошибку во второй раз. Тем не менее, вы можете использовать 'On Error Resume Next', чтобы следующий оператор подтвердил, что предыдущий преуспел. –

ответ

0

Как оформить код на шаге 2 в отдельную процедуру? Там вы можете сделать отдельную обработку ошибок с помощью нового оператора on error goto.

+0

да, я тоже мог бы это сделать. Так что, если я правильно его понимаю, вы можете использовать при ошибке go to statement в той же самой процедуре только один раз? –

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