Это подробно объясняется в руководстве по VB6 в разделе Иерархия обработки ошибок . On Error Goto 0
отключает обработчик ошибок в процедуре current , а не в вызывающих его процедурах.
Если в процедуре возникает ошибка и
эта процедура не включена
обработчик ошибок, поиск в Visual Basic
назад через ожидание
процедуры в списке вызовов - и выполняет первый
включенный обработчик ошибок он находит. Если оно
не обнаружена ошибка
обработчик в любом месте списка вызовов, это
представляет неожиданную ошибку по умолчанию
сообщение и прекращает выполнение.
Как уже говорили другие, вы можете перейти на вкладку Tools-Options-General и выбрать Break на всех ошибках . Это фактически отключает все ваши операторы On Error - среда IDE будет прерываться сразу после каждой ошибки.
Это может раздражать, если ваш код VB6 выдает ошибки как часть нормальной работы. Например, когда вы проверяете, существует ли файл, или когда пользователь нажимает кнопку отмены в обычном диалоге. Вы не хотите, чтобы IDE каждый раз ломалась в этих строках. Но у вас могут быть стандартные обработчики ошибок во всех ваших процедурах обработки событий, чтобы предотвратить сбой программы при непредвиденных ошибках. Но они доставляют неудобства, когда вы отлаживаете проблемы, потому что среда IDE не ломается в строке с ошибкой. Одна хитрость - отключить эти обработчики ошибок при работе в IDE, но оставить их во встроенном исполняемом файле. Вы делаете это так.
Перетащите эти функции в модуль.
Public Function InIDE() As Boolean
Debug.Assert Not TestIDE(InIDE)
End Function
Private Function TestIDE(Test As Boolean) As Boolean
Test = True
End Function
Тогда вы можете написать свои обработчики ошибок следующим образом.
Private Sub Form_Load()
If Not InIDE() Then On Error Goto PreventCrashes
<lots of code>
Exit Sub
PreventCrashes:
<report the error>
End Sub
Ущипнул от здесь . Другой совет - используйте бесплатную надстройку MZTools для автоматического добавления этих стандартных обработчиков ошибок. Что касается кода производственного качества, вы можете пойти дальше и добавить обработчик ошибок в каждую подпрограмму для создания трассировки стека гетто . Вы также можете сразу регистрировать ошибки в каждом обработчике ошибок.
EDIT: Ant правильно указал, что On Error Goto -1
является оператором VB.Net и не действует в VB6.
РЕДАКТИРОВАТЬ: Arvo и OneNerd написали ответы с интересным обсуждением эмуляции, наконец, разделительных блоков в обработке ошибок VB6. Обсуждение в этот вопрос также стоит посмотреть.