Excel VBA управление ошибками

290
WestWindsDemon

Я читал эту ветку об обработке ошибок, но когда я пытаюсь воспроизвести даже простой сценарий управления ошибками, это не сработает. Я пытаюсь запустить следующий модифицированный код из одного из примеров:

Sub Example() Dim n As Variant  On Error GoTo nx  For i = 1 To 10 n = 1 / 0 'this WILL cause an error. label1: Next i  Exit Sub  nx: n = 5 Resume label1  End Sub 

Код выглядит хорошо, но когда я запускаю его, я попадаю run-time error 11: division by zeroво всплывающее окно.

Может ли кто-нибудь помочь мне понять это или указать мне правильное направление?

0
Как и в случае с Ричардом, для меня это нормально. Используете ли вы директиву Option Explicit? Он выдаст ошибки для необъявленных переменных, что поможет отсеять ошибки из-за tpyos. Это также заставит вас объявлять все переменные, что в любом случае, вероятно, хорошо. https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/option-explicit-statement Yorik 5 лет назад 0

3 ответа на вопрос

1
Richard

Код работает нормально для меня и не выдает никаких ошибок. Я даже прошел по ней построчно, используя отладчик, и ничего плохого не произошло.

Как незначительный момент, я нахожу следующую альтернативу намного более понятной для понимания:

Sub Example()  Dim n As Variant  On Error Resume Next  For i = 1 To 10 n = 1 / 0 'this WILL cause an error. If Err.Number <> 0 Then n = 5 Next i  On Error GoTo 0  End Sub 

Однако это всего лишь личные предпочтения.

Я только что попытался запустить ваш код, та же ошибка продолжает появляться в этой строке: `n = 1/0 ', это вызовет ошибку. WestWindsDemon 5 лет назад 0
Это странно. Для меня `On Error Resume Next` означает, что ошибка не отображается после` n = 1 / 0`, но `Err.Number` теперь равен` 11` (деление на ноль). В результате значение `Err.Number <> 0` равно true, поэтому для` n` установлено значение `5`, и код продолжает цикл. Вы можете попробовать переустановить Excel. Richard 5 лет назад 1
Это рабочий компьютер, поэтому я не совсем уверен, является ли это реализованной функцией или поломкой ... Я все еще разочарован, потому что для продолжения разработки и написания своего кода мне нужно эффективно обрабатывать ошибки и исключения. Я только что отправил электронное письмо своим специалистам по ИТ, посмотрим, что они скажут. WestWindsDemon 5 лет назад 0
0
WestWindsDemon

Я наконец понял, в чем проблема, когда читал эту ветку . В меню параметров мои настройки были установлены по умолчанию на «Разрыв всех ошибок» вместо «Разрыв необработанных ошибок». Достаточно легко исправить, но у меня все еще есть другая проблема, связанная с разрывом Excel с любым экземпляром err.[arg]. Я получаю Compile error: Expected Function or Variable. Кто-нибудь может мне с этим помочь?

Super User - это не форум, где вы можете добавлять новые вопросы в ветку. Новый вопрос относится, ну, в общем, к новому вопросу. Пожалуйста, отредактируйте этот ответ, чтобы удалить дополнительный вопрос. Не стесняйтесь предоставить ссылку на этот связанный вопрос в вашем новом вопросе. robinCTS 5 лет назад 0
-1
cybernetic.nomad

Вы код перехватывает ошибку, а затем просто продолжает идти. Попробуйте вот так, и, возможно, вы увидите немного лучше, что с этим происходит:

Sub Example() Dim n As Variant  On Error GoTo nx  For i = 1 To 10 n = 1 / 0 'this WILL cause an error. label1: Next i  Debug.print "loop done"  Exit Sub  nx: Debug.print "error called", i n = 5 Resume label1  End Sub 
Я попробовал, всплывающее окно с ошибкой. Я начинаю думать, что это как-то мое превосходство в актерской игре, но я не совсем уверен. WestWindsDemon 5 лет назад 0

Похожие вопросы