2010-01-03 10 views
1

Может ли кто-нибудь объяснить мне, что означает этот код? Я предполагаю, что если ошибка произошла, перейдите в раздел ErrHandler, но почему в конце есть резюме следующего конца и Exit sub inbetween?Что происходит, возобновление следующего в конце кода означает в vba?

On Error Goto ErrHandler: 
N = 1/0 ' cause an error 
' 
' more code 
' 
Exit Sub 
ErrHandler: 
' error handling code 
Resume Next 
End Sub 

Я также написал короткий код, чтобы лучше понять. Если вы запустите его в VBA excel, вы получите 4 числа, которые появляются по порядку: 1,2,2,4 Я понимаю первые 2 числа, но почему это третий номер 2 и последний 4? btw для этого примера ошибка не возникла.

On Error Goto Err: 
n = 1 
MsgBox n 
Err: 
n = 2 
MsgBox n 
Resume Next 
MsgBox 4 

Resume Next 
End Sub 
+0

и когда я изменил Resume Next для резюме, я получил 1, а затем продолжал получать только 2s, довольно изменение ! – excel34

+1

Вы захотите добавить Exit Sub до Err :, потому что в реальном коде вы не хотите, чтобы ваш код обработки ошибок запускался, если ошибок нет. Если вы хотите увидеть, что происходит с вышеуказанным кодом, вы должны установить точку останова и запустить код, используя F8, чтобы пройти через него. Это позволит вам увидеть порядок выполнения кода. Если ошибок нет Возобновление и возобновление Далее переведите выполнение кода в начало обработчика ошибок. Resume помещает вас в бесконечный цикл возврата к началу обработчика ошибок, а Resume Next позволяет обойти его после его вызова. –

ответ

1

Он поднимает выполнение тела метода в точке после того, где произошла ошибка.

1

Из документации On Error:

Указывает, что при возникновении ошибки во время выполнения, управление переходит на заявление сразу после заявление, в котором произошла ошибка, и выполнение продолжается с этого момента.

2

Уже было сказано, что Resume Next будет выполнять выполнение в точке после возникновения ошибки. Существует также Возобновление, которое подбирает выполнение, начиная с строки, вызвавшей ошибку, и Resume, которая берет выполнение на указанной метке.

Итак, это то, что происходит в коде, при условии:

  1. N = 1/0 возникает деление на ноль ошибок
  2. выполнение перемещается к метке ErrHandler.
  3. Код ошибки будет работать до тех пор, пока он не возобновится.
  4. Возобновление следующего будет перемещать выполнение в строку после N = 1/0. Поскольку вы возвращаетесь назад, имеет смысл, что ваш код обработки ошибок может сделать что-то вроде этого N = 1, иначе остальная часть кода попытается использовать N, который не инициализирован, и вы получите еще одну ошибку.

Следующая ссылка дает простое объяснение oerror обращения и заявления три резюме:

http://www.cpearson.com/excel/ErrorHandling.htm

+0

Привет, Waleed, что произойдет, если ошибка не произошла, какой эффект возобновляется в следующий раз? – excel34

+0

Если вы посмотрите на первый фрагмент кода, который вы указали, перед меткой обработчика ошибок есть «Exit Sub». Если вы не столкнетесь с ошибкой, эта строка выйдет из процедуры, не запустив ни одну из строк кода, следующих за ней, включая оператор Resume Next.Таким образом, Resume Next ничего не делает, если ошибок нет. –

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