Это большое недоразумение!
Существует важная разница между:
Err.Clear
GoTo CleanUp
и
Resume CleanUp
НИКОГДА не используйте первую форму, ВСЕГДА используйте Resume CleanUp (только).
Возобновите выполнение СБРОСА состояния внутренней ошибки VB6, поэтому при возникновении ДРУГОЙ ошибки будет применено «On Error GoTo Label». Если вы используете «Err.Clear», тогда объект Err очищается, но состояние ВНУТРЕННЕЙ ошибки НЕ очищается, и при возникновении другой ошибки он рассматривается как код БЕЗ какого-либо обработчика исключений и выбрасывает вне функции. Вы НЕ МОЖЕТЕ исправить это, используя «On Error GoTo Label2»
Рассмотрим этот код:
Public Sub Test()
On Error GoTo L1
MsgBox 0 / (1 - 1)
Exit Sub
L1:
Err.Clear
L0:
On Error GoTo L2
MsgBox 0 / (1 - 1) 'ERROR!
Exit Sub
L2:
MsgBox Err
End Sub
Если вы запустите это, оно прервется на "ОШИБКА!" линия.
Если вы замените «Err.Clear» на «Resume L0», выполнение не прервется на «ERROR!» строка и код переходят на метку «L2» и выдают «MsgBox Err»