Трудно сказать, не глядя на рассматриваемый код, но бывают случаи, когда допустимо несколько различных типов обработки ошибок в одной функции. В общем, один On Error GoTo ErrHandler
в верхней части функции выполняет ту же функцию, что и включающий блок try/catch
в языке, который поддерживает исключения - он предназначен для обнаружения неожиданных ошибок, которые происходят.
Тем не менее, внутри функции могут быть места, где ошибка является нормальным, ожидаемым событием, которое вы хотите проверить на наличие inline. Например, предположим, что вы собираетесь получить доступ к сетевому диску, где вы должны учитывать, что удаленный сервер находится в автономном режиме, сеть отключена и т. Д. В этом случае, даже если в верхней части есть оператор On Error GoTo ErrHandler
, вы можете включить это локально с On Error Resume Next
и попробуйте получить доступ к диску. Если происходит ошибка, VB6 теперь просто перейдет к следующему оператору, где вы можете проверить Err.Number
на наличие чего-либо, кроме 0. Это аналог вложенного try/catch
для перехвата ожидаемого состояния ошибки, которое вы можете обработать локально. После того, как выполнение вышло за пределы рискованного кода, вы должны отметить конец раздела, где вы собираетесь «вручную» проверять ошибки таким образом, с помощью другого оператора On Error GoTo ErrHandler
, чтобы снова включить функцию многоуровневый обработчик.
Так что есть случай, когда допустимо более одного On Error...
статуса. Можно привести аргумент, что рискованная функция должна быть подвергнута рефакторингу и иметь собственный обработчик, но вам все равно придется иметь дело с конкретными (ожидаемыми) возвращаемыми значениями ошибок из этой отдельной функции, потому что называется Функция, вероятно, не будет знать, что делать перед лицом этих ошибок в контексте , вызывающей функцию. Вы бы все равно справились с этим с помощью краткосрочной техники On Error Resume Next
.
On Error GoTo 0
отключает все обработку ошибок, позволяя VB6 выходить из функции при возникновении непредвиденной ошибки. Мне трудно придумать не надуманную ситуацию, когда это было бы хорошим вариантом.