Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
Киска
-
- Новичок

-

-
- Сообщения: 39
- Зарегистрирован: 23.11.2006 (Чт) 1:43
Киска » 29.01.2007 (Пн) 1:20
Почему у меня не получается обработать ошибку?
On Error GoTo 20
For i = 0 To 1
a = i / 0
...
20 Next
-
tyomitch
-
- Пользователь #1352

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 29.01.2007 (Пн) 1:29
Потому что.
20 If Err Then Resume 30
30 Next
-
Киска
-
- Новичок

-

-
- Сообщения: 39
- Зарегистрирован: 23.11.2006 (Чт) 1:43
Киска » 29.01.2007 (Пн) 2:11
а почему мой вариант не работает?
-
tyomitch
-
- Пользователь #1352

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 29.01.2007 (Пн) 2:26
Потому что ошибки внутри обработчика ошибок не обрабатываются.
-
tyomitch
-
- Пользователь #1352

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 29.01.2007 (Пн) 3:13
Внутри обработчика ошибок не обрабатываются вновь возникшие ошибки. Так понятнее?
Выход из обработчика ошибок -- командой Resume.
-
skiperski
-
- Идеолог

-

-
- Сообщения: 1386
- Зарегистрирован: 25.06.2002 (Вт) 15:52
skiperski » 29.01.2007 (Пн) 3:22
- Код: Выделить всё
On Error GoTo 20
For i = 0 To 1
a = i / 0
...
20 Resume Next
Next
или так
- Код: Выделить всё
10 On Error GoTo 40
20 For i = 0 To 1
30 a = i / 0
...
40 Resume 50
50 Next
а правильно так
- Код: Выделить всё
On Error GoTo hErr
For i = 0 To 1
a = i / 0
...
GoTo doNext
hErr:
Resume doNext
doNext:
Next
Последний раз редактировалось
skiperski 29.01.2007 (Пн) 3:31, всего редактировалось 1 раз.
-
tyomitch
-
- Пользователь #1352

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 29.01.2007 (Пн) 3:31
skiperski, так тоже нельзя. Будет ошибка №20, если к моменту вызова Resume ошибки не было.
Правильный код уже указан в первом ответе.
-
skiperski
-
- Идеолог

-

-
- Сообщения: 1386
- Зарегистрирован: 25.06.2002 (Вт) 15:52
skiperski » 29.01.2007 (Пн) 3:33
tyomitch писал(а):skiperski, так тоже нельзя. Будет ошибка №20, если к моменту вызова Resume ошибки не было.
Ошибка будет, но она сама на свой обработчик и прыгнет. И после повтора строки с Resume продолжит выполнение. Это не красиво, но работает.
-
Киска
-
- Новичок

-

-
- Сообщения: 39
- Зарегистрирован: 23.11.2006 (Чт) 1:43
Киска » 29.01.2007 (Пн) 3:35
что это за обработчик ошибок такой? Где он находится? Я просто говорю - в случае ошибки продолжить выполнение со строки 20... Что ещё за обработчик ошибки - непонятно.
-
skiperski
-
- Идеолог

-

-
- Сообщения: 1386
- Зарегистрирован: 25.06.2002 (Вт) 15:52
skiperski » 29.01.2007 (Пн) 3:43
В твоём случае проще сделать как
tyomitch советует
- Код: Выделить всё
On Error GoTo 20
For i = 0 To 1
a = i / i
...
20 If (Err) Then Resume 30
30 Next
А обработчик ошибки -- это код выполняющийся после возникновения ошибки и принимающий решение, что делать дальше. В твоём случае это строка с меткой 20.
-
zan
-
- Бывалый

-
-
- Сообщения: 224
- Зарегистрирован: 24.08.2006 (Чт) 4:55
zan » 29.01.2007 (Пн) 4:17
А не проще вообще ошибку в данном случае не обрабатывать (об этом же не писали)...
- Код: Выделить всё
On Error Resume Next
For i = 0 To 1
a = i / i
....
Next i
-
tyomitch
-
- Пользователь #1352

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 29.01.2007 (Пн) 5:19
Писал skiperski в своём первом примере. У него там как раз замаскированный On Error Resume Next.
-
Киска
-
- Новичок

-

-
- Сообщения: 39
- Зарегистрирован: 23.11.2006 (Чт) 1:43
Киска » 30.01.2007 (Вт) 3:15
значит, я так понимаю, мы входим в обработчик ошибки, из которого надо обязательно выйти, используя Resume. А почему не допускается сразу написать On Error Resume 20 - т.е. начать выполнение со строки 20, выйдя из обработчика (или даже не входя

)?
-
tyomitch
-
- Пользователь #1352

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 30.01.2007 (Вт) 4:22
Напиши Биллу жалобу, что не предусмотрел.
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: серверянин, Google-бот, Majestic-12 [Bot], The trick и гости: 1