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

Вход

Регистрация

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

 

= Мир MS Excel/Перехват ошибок - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перехват ошибок (Макросы/Sub)
Перехват ошибок
tasdel Дата: Среда, 15.09.2021, 18:55 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте, уважаемые колдуны и шаманы.
Имеется макрос, который выдает ошибку. Я сделал перехват с помощью сообщения.Со временем это сообщение начало напрягать. Как это все дело можно обойти?
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
n = 0
While Worksheets(2).Cells(n + 11, 11).Value <> ""
n = n + 1
Wend
On Error GoTo ошибка
For i = 11 To n + 10

If ActiveCell.Offset(-1, 0) = Worksheets(2).Cells(i, 12).Value Then
  UserForm3.Show
  End If
  
  If ActiveCell.Offset(-2, 0) = Worksheets(2).Cells(i, 12).Value Then
  UserForm2.Show
  End If
  Next
  
  If ActiveCell.Offset(-5, -1).Interior.ColorIndex = 6 Then
  UserForm4.Show
  End If
  
  If ActiveCell.Offset(-5, 1).Interior.ColorIndex = 27 Then
  UserForm4.Show
  End If
  
  If ActiveCell.Interior.ColorIndex = 40 Then
  UserForm5.Show
  End If
  
   If ActiveCell.Offset(-4, 0).Interior.ColorIndex = 15 Then
  UserForm4.Show
  End If

  If ActiveCell.Interior.ColorIndex = 6 Then
  UserForm1.Show
  End If
If ActiveCell.Interior.ColorIndex = 27 Then
  UserForm1.Show
  End If
  
Exit Sub

ошибка: MsgBox "Ошибка"
End Sub
[/vba]


Сообщение отредактировал tasdel - Среда, 15.09.2021, 19:04
 
Ответить
СообщениеЗдравствуйте, уважаемые колдуны и шаманы.
Имеется макрос, который выдает ошибку. Я сделал перехват с помощью сообщения.Со временем это сообщение начало напрягать. Как это все дело можно обойти?
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
n = 0
While Worksheets(2).Cells(n + 11, 11).Value <> ""
n = n + 1
Wend
On Error GoTo ошибка
For i = 11 To n + 10

If ActiveCell.Offset(-1, 0) = Worksheets(2).Cells(i, 12).Value Then
  UserForm3.Show
  End If
  
  If ActiveCell.Offset(-2, 0) = Worksheets(2).Cells(i, 12).Value Then
  UserForm2.Show
  End If
  Next
  
  If ActiveCell.Offset(-5, -1).Interior.ColorIndex = 6 Then
  UserForm4.Show
  End If
  
  If ActiveCell.Offset(-5, 1).Interior.ColorIndex = 27 Then
  UserForm4.Show
  End If
  
  If ActiveCell.Interior.ColorIndex = 40 Then
  UserForm5.Show
  End If
  
   If ActiveCell.Offset(-4, 0).Interior.ColorIndex = 15 Then
  UserForm4.Show
  End If

  If ActiveCell.Interior.ColorIndex = 6 Then
  UserForm1.Show
  End If
If ActiveCell.Interior.ColorIndex = 27 Then
  UserForm1.Show
  End If
  
Exit Sub

ошибка: MsgBox "Ошибка"
End Sub
[/vba]

Автор - tasdel
Дата добавления - 15.09.2021 в 18:55
bmv98rus Дата: Четверг, 16.09.2021, 07:48 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3667
Репутация: 650 ±
Замечаний: 0% ±

Excel 2013/2016
Как это все дело можно обойти?

1. устранить ошибку
2. обрабатывать ошибку в месте ей появления и в зависимости от нее делать то или другое. конструкция более обширна
3. Не выводить сообщений, а просто выходить из процедуры.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
Как это все дело можно обойти?

1. устранить ошибку
2. обрабатывать ошибку в месте ей появления и в зависимости от нее делать то или другое. конструкция более обширна
3. Не выводить сообщений, а просто выходить из процедуры.

Автор - bmv98rus
Дата добавления - 16.09.2021 в 07:48
tasdel Дата: Четверг, 16.09.2021, 08:36 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
bmv98rus, Ошибка 1004 выскакивает, когда я выделяю ячейки первой, второй и третьей строки рабочего листа, при выделении ячеек, начиная с четвертой строки, макрос работает без ошибок.


Сообщение отредактировал tasdel - Четверг, 16.09.2021, 08:37
 
Ответить
Сообщениеbmv98rus, Ошибка 1004 выскакивает, когда я выделяю ячейки первой, второй и третьей строки рабочего листа, при выделении ячеек, начиная с четвертой строки, макрос работает без ошибок.

Автор - tasdel
Дата добавления - 16.09.2021 в 08:36
doober Дата: Четверг, 16.09.2021, 09:24 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 816
Репутация: 301 ±
Замечаний: 0% ±

Excel 2010
ActiveCell.Offset(-5, -1)

А что Вы ожидали при выделении 3 строки, если макрос посылает в отрицательную строку


 
Ответить
Сообщение
ActiveCell.Offset(-5, -1)

А что Вы ожидали при выделении 3 строки, если макрос посылает в отрицательную строку

Автор - doober
Дата добавления - 16.09.2021 в 09:24
tasdel Дата: Четверг, 16.09.2021, 10:00 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
doober, Я понимаю, что именно в этом загвоздка. Перехват ошибки без участия msgbox, можно как-то реализовать?


Сообщение отредактировал tasdel - Четверг, 16.09.2021, 10:43
 
Ответить
Сообщениеdoober, Я понимаю, что именно в этом загвоздка. Перехват ошибки без участия msgbox, можно как-то реализовать?

Автор - tasdel
Дата добавления - 16.09.2021 в 10:00
Gustav Дата: Четверг, 16.09.2021, 10:16 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1913
Репутация: 771 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Можно проверять текущие номера строки и столбца перед каждым правилом, содержащим отрицательные смещения, придав ему примерно такой вид:
[vba]
Код
If ActiveCell.Row <= 5 Or ActiveCell.Column <= 1 Then
ElseIf ActiveCell.Offset(-5, -1).Interior.ColorIndex = 6 Then
    UserForm4.Show
End If
[/vba]


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Четверг, 16.09.2021, 10:26
 
Ответить
СообщениеМожно проверять текущие номера строки и столбца перед каждым правилом, содержащим отрицательные смещения, придав ему примерно такой вид:
[vba]
Код
If ActiveCell.Row <= 5 Or ActiveCell.Column <= 1 Then
ElseIf ActiveCell.Offset(-5, -1).Interior.ColorIndex = 6 Then
    UserForm4.Show
End If
[/vba]

Автор - Gustav
Дата добавления - 16.09.2021 в 10:16
bmv98rus Дата: Четверг, 16.09.2021, 10:24 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3667
Репутация: 650 ±
Замечаний: 0% ±

Excel 2013/2016
ну или
[vba]
Код
on error resume next

If ActiveCell.Offset(-1, 0) = Worksheets(2).Cells(i, 12).Value Then
if err=0 then UserForm3.Show
err.clear
End If
[/vba]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщениену или
[vba]
Код
on error resume next

If ActiveCell.Offset(-1, 0) = Worksheets(2).Cells(i, 12).Value Then
if err=0 then UserForm3.Show
err.clear
End If
[/vba]

Автор - bmv98rus
Дата добавления - 16.09.2021 в 10:24
tasdel Дата: Четверг, 16.09.2021, 11:00 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 138
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо ребята, я теперь довольный как слон!!! hands


Сообщение отредактировал tasdel - Четверг, 16.09.2021, 11:05
 
Ответить
СообщениеСпасибо ребята, я теперь довольный как слон!!! hands

Автор - tasdel
Дата добавления - 16.09.2021 в 11:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перехват ошибок (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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