Страницы: 1
RSS
Исключение при SpecialCells(xlVisible)
 
Доброго времени суток.
Использую следующий код
Set rw = .Offset(0).Resize(.Cells.Count).SpecialCells(xlVisible)
До этого устанавливаю фильтр. Если строки есть - то всё хорошо. Но если фильтр ничего не нашел (нет записей удовлетворяющих условиям), тогда выходит ошибка. Можно как-то это обойти без использования исключения ? Почему эта строка не может просто вернуть пустой Range, у которого можно просто проверить кол-во строк и, если равно нулю, что-то сделать и продолжить цикл дальше?
Спасибо
 
Используйте On Error Resume Next
 
1. Возможно я чего-то не понимаю, но зачем .Offset(0)? Сместиться на 0 строк - это остаться на месте
2. Что мешает делать проверку
Код
If .Cells.Count > 0 then Set rw = .Offset(0).Resize(.Cells.Count).SpecialCells(xlVisible)

 
Цитата
Kuzmich написал: Используйте On Error Resume Next
тогда выполнение пойдёт дальше за этой строкой, а этого не должно быть.
Цитата
МВТ написал: 2. Что мешает делать проверку
Вы абсолютно правы )) Сам не додумался до очевидного =\ Спасибо!
Цитата
МВТ написал: 1. ...зачем .Offset(0)?
Да, offset тут излишен. Думал что без оффсет я не получу объект range. Хотя с ним же и работаю. Моя глупость )
 
fmind, использование On Error - самый простой способ. А вообще, зависит от того, что является объектом перед точкой. Например, для автофильтра на листе, у которого строка заголовка не скрыта, т.е. по крайней мере одна строка видна:
Код
With ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
  If .Areas.Count > 1 Or .Rows.Count > 1 Then 'есть отфильтрованные строки
    .Offset(1).Copy Range("Лист2!A1") 'копировать отфильтрованнве строки (например)
  End If
End With
 
Цитата
Казанский написал:
А вообще, зависит от того, что является объектом перед точкой.
Перед точкой ActiveSheet. Ваш вариант более правильный и функциональный )) Спасибо за наводку!)  А7 - строка под фильтром ) Не судите строго, у меня было так:
Код
        With ActiveSheet
          With .Range(.Range("A7"), .Range("A5000").End(xlUp))
    
          On Error GoTo GoOn:
          Set rw = .Offset(0).Resize(.Cells.Count).SpecialCells(xlVisible)                
              . . .              
              rw(1, CellFill) = ConsolidateData(I).Refill
              . . .
            End With
        End With
Страницы: 1
Читают тему
Наверх