Страницы: 1
RSS
VBA AutoFilter and on error goto point1; on error goto point2, Ошибка с несколькими операторами On error go to
 
Добрый вечер
Не могу понять почему выдаётся ошибка при повторном пропуске ошибки vba

Суть макроса фильтрует в одной таблице данные несколько раз и переносит только видимые ячейки из таблицы в определённый диапазон но фильтрация может быть не только которые есть значения в таблице а даже которых нет в случае ошибки переходит к точке воспроизведения макроса.
но если уже повторно назначаешь on error go to point....
то он не пропускает ошибку  и не переходит к нужной точке воспроизведения а выдает ошибку срабатывания макроса
<Не найдено ни одной ячейки, удовлетворяющей указанным условиям.>
в файле лист 1 modul5

Код
Sub testcoppaste()
Range("Таблица3[проц]").Select
ActiveSheet.ListObjects("Таблица3").Range.AutoFilter Field:=2, Criteria1:="20"
On Error GoTo point2
    Range("Таблица3[проц]").SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Range("A8").Select
    ActiveSheet.Paste

point2:


Range("Таблица4[проц]").Select
ActiveSheet.ListObjects("Таблица4").Range.AutoFilter Field:=2, Criteria1:="10"
On Error GoTo point3 ' тут должен был перейти на точку 3 но не переходит а выдает ошибку
    Range("Таблица4[проц]").SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Range("b8").Select
    ActiveSheet.Paste
point3:

End Sub
Изменено: splashsnake - 13.05.2024 22:29:28
 
Нашел решение таким методом но возможно некорректно так писать
Код
dim a
On Error Resume Next
a = Range("Таблица4[проц]").SpecialCells(xlCellTypeVisible).Count
If a = "" Then GoTo point3


т.е задаем переменную.
к переменной считаем значения и тогда переходим по точкам а не через ошибки
 
В общем случае, обработчик ошибок On Error не предназначен для условного перехода к выполнению каких-то подпрограмм.
Для условного перехода используйте операторы GoTo или GoSub
А по последнему Вашему коду, я бы так написал
Код
Dim aRng As Range
Dim a As Integer
On Error Resume Next
Set aRng = Range("Таблица4[проц]").SpecialCells(xlCellTypeVisible)
If Not aRng Is Nothing Then
  a = aRng.Count
Else
  GoTo point3
End If
Согласие есть продукт при полном непротивлении сторон
 
Метод проверки на ошибку может быть и  Err.Number <> 0  в случае использования Resume Next. проверять ли это после выполнении подозрительной операции или проверять результат этой операции - дело вкуса. Другое дело что  задумано наличие только одного обработчика ошибок которым является On Error GoTo
По вопросам из тем форума, личку не читаю.
 
Благодарю за помощь
 
Цитата
Sanja написал:
В общем случае, обработчик ошибок  On Error  не предназначен для условного перехода к выполнению каких-то подпрограмм.Для условного перехода используйте операторы GoTo или GoSubА по последнему Вашему коду, я бы так написалКодDim aRng As Range

Ту стать инструкций по операторам читал некоторых нюансов немного не понял поэтому тут и задал вопрос.
Не мог понять почему почему нельзя повторно on error  каждый раз использовать для перехода.
Код
On Error Resume Next
Set aRng = Range("Таблица4[проц]").SpecialCells(xlCellTypeVisible)
If Not aRng Is Nothing Then

А так вариант понравился. как решение
 
Цитата
splashsnake написал:
Не мог понять почему почему нельзя повторно on error  каждый раз использовать для перехода
По тому что так задумано и такие скачки по м6еткам любит тут отдин любитель, но они ненужны. А вот обработка ошибки , как в примере по справке - выглядить и понятно и общаяя для всей процедуры.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх