Добрый вечер Не могу понять почему выдаётся ошибка при повторном пропуске ошибки 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
В общем случае, обработчик ошибок 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еткам любит тут отдин любитель, но они ненужны. А вот обработка ошибки , как в примере по справке - выглядить и понятно и общаяя для всей процедуры.