Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обработчик многократных ошибок - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработчик многократных ошибок (Макросы/Sub)
Обработчик многократных ошибок
skais Дата: Вторник, 13.03.2018, 15:48 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Каким образом можно организовать on error goto так, чтобы и на второй и последующих ошибках он срабатывал.
Пример приложил.
К сообщению приложен файл: err.xlsm(16.4 Kb)
 
Ответить
СообщениеКаким образом можно организовать on error goto так, чтобы и на второй и последующих ошибках он срабатывал.
Пример приложил.

Автор - skais
Дата добавления - 13.03.2018 в 15:48
sboy Дата: Вторник, 13.03.2018, 16:04 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2055
Репутация: 588 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
[vba]
Код
Sub ee()
On Error Resume Next
For i = 1 To 5
    c = i / 0
        If Err Then
            Cells(i, "A") = "Ошибка"
            Err.Clear
        Else: Cells(i, "A") = "Норма"
        End If
Next
End Sub
[/vba]

добавлено:
правда этот метод стоит использовать только, если Вы ошибку ждете и знаете какая она будет.
или делать обработку номера ошибки.
К сообщению приложен файл: 1278292.xlsm(17.0 Kb)


Сообщение отредактировал sboy - Вторник, 13.03.2018, 16:07
 
Ответить
СообщениеДобрый день.
[vba]
Код
Sub ee()
On Error Resume Next
For i = 1 To 5
    c = i / 0
        If Err Then
            Cells(i, "A") = "Ошибка"
            Err.Clear
        Else: Cells(i, "A") = "Норма"
        End If
Next
End Sub
[/vba]

добавлено:
правда этот метод стоит использовать только, если Вы ошибку ждете и знаете какая она будет.
или делать обработку номера ошибки.

Автор - sboy
Дата добавления - 13.03.2018 в 16:04
skais Дата: Вторник, 13.03.2018, 16:25 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Неплохо, но все же я бы хотел чтоб код не возвращался сразу на следующую строку после ошибки а уходил в обработчик (потому как после ошибки следующие действия не будут генерировать ошибку но будут искажать данные).
А ставить проверку if err тоже не ахти , откуда знать где стрельнет. Неужели нет решения?
 
Ответить
СообщениеНеплохо, но все же я бы хотел чтоб код не возвращался сразу на следующую строку после ошибки а уходил в обработчик (потому как после ошибки следующие действия не будут генерировать ошибку но будут искажать данные).
А ставить проверку if err тоже не ахти , откуда знать где стрельнет. Неужели нет решения?

Автор - skais
Дата добавления - 13.03.2018 в 16:25
sboy Дата: Вторник, 13.03.2018, 17:29 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2055
Репутация: 588 ±
Замечаний: 0% ±

Excel 2010
тогда Вы противоречите сами себе
следующие действия не будут генерировать ошибку

откуда знать где стрельнет

Вы ошибку ловите конкретно после какого-то действия?
 
Ответить
Сообщениетогда Вы противоречите сами себе
следующие действия не будут генерировать ошибку

откуда знать где стрельнет

Вы ошибку ловите конкретно после какого-то действия?

Автор - sboy
Дата добавления - 13.03.2018 в 17:29
SLAVICK Дата: Вторник, 13.03.2018, 17:40 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2252
Репутация: 746 ±
Замечаний: 0% ±

2007,2010,2013,2016
ставить проверку if err тоже не ахти , откуда знать где стрельнет. Неужели нет решения?

Есть - продумывать все тщательно при написании кода, и не допускать возникновения ошибки.
Например для вашего примера достаточно добавить проверку на 0- второго аргумента.
И поменьше использовать GOTO.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
ставить проверку if err тоже не ахти , откуда знать где стрельнет. Неужели нет решения?

Есть - продумывать все тщательно при написании кода, и не допускать возникновения ошибки.
Например для вашего примера достаточно добавить проверку на 0- второго аргумента.
И поменьше использовать GOTO.

Автор - SLAVICK
Дата добавления - 13.03.2018 в 17:40
sboy Дата: Вторник, 13.03.2018, 17:54 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2055
Репутация: 588 ±
Замечаний: 0% ±

Excel 2010
По вашему примеру и вопросу
чтобы и на второй и последующих ошибках он срабатывал

вот так будет работать, но использовать не рекомендую :D
[vba]
Код
Sub ee()
On Error GoTo 1
For i = 1 To 5
    c = i / 0
    GoTo 2:
2:  Cells(i, "A") = "Норма"
3:
Next
Exit Sub
1:
        Cells(i, "A") = "Ошибка"
        Err.Clear
        Resume 3
End Sub
[/vba]
 
Ответить
СообщениеПо вашему примеру и вопросу
чтобы и на второй и последующих ошибках он срабатывал

вот так будет работать, но использовать не рекомендую :D
[vba]
Код
Sub ee()
On Error GoTo 1
For i = 1 To 5
    c = i / 0
    GoTo 2:
2:  Cells(i, "A") = "Норма"
3:
Next
Exit Sub
1:
        Cells(i, "A") = "Ошибка"
        Err.Clear
        Resume 3
End Sub
[/vba]

Автор - sboy
Дата добавления - 13.03.2018 в 17:54
skais Дата: Среда, 14.03.2018, 09:38 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
sboy Спасибо! Главное - я увидел Resume 3, остальное все понятно, а то не знал как сделать преход думал Resume goto 3.
 
Ответить
Сообщениеsboy Спасибо! Главное - я увидел Resume 3, остальное все понятно, а то не знал как сделать преход думал Resume goto 3.

Автор - skais
Дата добавления - 14.03.2018 в 09:38
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработчик многократных ошибок (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!