On Error не перехватывает ошибку

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
NightStorm
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 09.06.2008 (Пн) 18:30

On Error не перехватывает ошибку

Сообщение NightStorm » 09.05.2009 (Сб) 15:25

Чё-то я никак понять не могу:
есть форма, на ней DriveListBox (Drive1 в примере).

Код: Выделить всё
On Error GoTo driveErr
Drive1.ListIndex = <число>

Если попадается диск "А:\" (а дисковода в компе нету впринципе), то всё нормально, ошибка перехватывается, а если попадается СД-ром, в котором нету диска, то ошибка не перехватывается и прога помирает с "Runtime error 68. Устройство недоступно".

При это заметил, что если написать
Код: Выделить всё
On Error Resume Next
Drive1.ListIndex = <число>

то перехватываются все ошибки.

Никак не могу понять, почему так? помогите плиз? :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: On Error не перехватывает ошибку

Сообщение alibek » 09.05.2009 (Сб) 15:49

Что в driveErr?
Lasciate ogni speranza, voi ch'entrate.

NightStorm
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 09.06.2008 (Пн) 18:30

Re: On Error не перехватывает ошибку

Сообщение NightStorm » 09.05.2009 (Сб) 15:51

alibek писал(а):Что в driveErr?

просто сообщение типа "Ошибка диска" обычным msgbox'ом и Exit Sub

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: On Error не перехватывает ошибку

Сообщение alibek » 09.05.2009 (Сб) 16:06

Покажи код.
Lasciate ogni speranza, voi ch'entrate.

NightStorm
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 09.06.2008 (Пн) 18:30

Re: On Error не перехватывает ошибку

Сообщение NightStorm » 09.05.2009 (Сб) 16:40

Код: Выделить всё
Private Sub SelectDrive(drvLI As Integer)
On Error GoTo driveErr
Drive1.ListIndex = drvLI
Dir1.Path = Drive1.Drive
Exit Sub
driveErr:
MsgBox "Drive error: " & Error
Exit Sub
End If
End Sub

Dir1 - список папок стандартный

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: On Error не перехватывает ошибку

Сообщение alibek » 09.05.2009 (Сб) 17:39

Зачем End If? Зачем второй Exit Sub? Что такое Error?
Этот код в принципе некорректен.
Lasciate ogni speranza, voi ch'entrate.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: On Error не перехватывает ошибку

Сообщение jangle » 09.05.2009 (Сб) 18:13

NightStorm писал(а):Никак не могу понять, почему так? помогите плиз? :)


Что не можешь понять? Твой вообще не компилируется, сразу указывается где ошибки.

NightStorm
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 09.06.2008 (Пн) 18:30

Re: On Error не перехватывает ошибку

Сообщение NightStorm » 09.05.2009 (Сб) 18:25

Зачем End If? Зачем второй Exit Sub? Что такое Error?
Этот код в принципе некорректен.

End if извиняюсь, случайно попал, на самом деле в проге его там нет :)
Error - собстна пишет чего за ошибка случилась (по дефолту же возвращает текст ошибки, если она произошла)
Exit Sub - согласен, может быть и лишний, но работе абсолютно не мешает. Суть-то не в нём, если убрать, то всё равно не работает как надо.

А какой код тогда "впринципе корректен"?

Что не можешь понять? Твой вообще не компилируется, сразу указывается где ошибки.

Если не компилируется из-за End If, то см. выше, это я случайно в пример приписал, торопился.

Извиняюсь, конечно, но, народ, вы хоть вопрос читаете? Там ясно написано в чём проблема и она не "У меня не стартует прога, ругается при компиляции, чё делать?". Можно ж додуматься, что End If там лишнее...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: On Error не перехватывает ошибку

Сообщение alibek » 09.05.2009 (Сб) 19:44

Error - это глупость. Текст ошибки - это Err.Description. Кроме того, смысла в таком обработчике мало. Надо смотреть код ошибки и в определенных случаях делать Resume.
Lasciate ogni speranza, voi ch'entrate.

NightStorm
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 09.06.2008 (Пн) 18:30

Re: On Error не перехватывает ошибку

Сообщение NightStorm » 09.05.2009 (Сб) 19:58

alibek писал(а):Error - это глупость. Текст ошибки - это Err.Description. Кроме того, смысла в таком обработчике мало. Надо смотреть код ошибки и в определенных случаях делать Resume.


Блин... издеваетесь чтоли?
Я не про Error вопрос задавал, а про "почему перехвата ошибки не происходит". "Обработчик" (если то, что у меня написано можно так назвать) висит просто для того, чтоб прога не помирала при неправильном значении Drive1.ListIndex

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: On Error не перехватывает ошибку

Сообщение alibek » 09.05.2009 (Сб) 20:09

Не происходит, потому что у тебя обработчик некорректный. Например, в самом обработчике происходит ошибка. Возможно, из-за того, что ты там зачем-то используешь Error.
Lasciate ogni speranza, voi ch'entrate.

NightStorm
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 09.06.2008 (Пн) 18:30

Re: On Error не перехватывает ошибку

Сообщение NightStorm » 09.05.2009 (Сб) 20:15

alibek писал(а):Не происходит, потому что у тебя обработчик некорректный. Например, в самом обработчике происходит ошибка. Возможно, из-за того, что ты там зачем-то используешь Error.

Неа. Иначе бы писал не "Устройство не готово", а ошибку, которая произошла в обработчике. Можно даже это понять, расставив стоп-точки и увидев, что до обработчика вообще дело не доходит.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: On Error не перехватывает ошибку

Сообщение alibek » 09.05.2009 (Сб) 20:19

Попробуй в обработчике сделать Err.Clear. Или добавить Resume Next.
А еще проверь, может ошибка у тебя возникает уже в другой процедуре.
Lasciate ogni speranza, voi ch'entrate.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: On Error не перехватывает ошибку

Сообщение iGrok » 09.05.2009 (Сб) 20:25

Короче. Попробуй для начала то, что советуют. Если не поможет - выкладывай кусок проекта, по которому видно, что и как глючит.

З.Ы. У меня приведённый тобой код работает, и нормально обрабатывает ошибки. Впрочем, Error - это действительно какой-то "пережиток прошлого". Используй лучше Msgbox "Error: " & Err.Number & " " & Err.Description...

З.З.Ы. А что у тебя в Dir1_Change?
label:
cli
jmp label


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 58

    TopList