В общем, хороших универсальных идей никто не предложил, тогда резюмирую.
Методы
и ряд других, отвечающих за редактирование содержимого и форматирование ячеек, НЕ действуют на ячейки, скрытые фильтром, если таковые попадаются в обрабатываемом диапазоне.
С одной стороны всё в полном соответствии с работой с отфильтрованным листом «вручную» (при нажатии, к примеру, Del очищаются только видимые ячейки, а скрытые фильтром игнорируются).
Но при работе из-под VBA такое поведение выглядит неочевидным или даже нелогичным. Ведь обращение идёт к Range целиком, а не к Range.SpecialCells(xlCellTypeVisible), т.е. нигде не указано, что обрабатываемая область должна чем-то ограничиваться. По крайней мере для меня эта особенность стала неприятной неожиданностью и привела к ошибке в программе, теперь придётся иметь её в виду при разработке.
Что делать, если всё же нужно работать с целым диапазоном, а не только с видимой его частью:
Методы
| Код |
|---|
Range.Clear Range.ClearContents Range.Value Range.Formula Range.Borders Range.Copy |
С одной стороны всё в полном соответствии с работой с отфильтрованным листом «вручную» (при нажатии, к примеру, Del очищаются только видимые ячейки, а скрытые фильтром игнорируются).
Но при работе из-под VBA такое поведение выглядит неочевидным или даже нелогичным. Ведь обращение идёт к Range целиком, а не к Range.SpecialCells(xlCellTypeVisible), т.е. нигде не указано, что обрабатываемая область должна чем-то ограничиваться. По крайней мере для меня эта особенность стала неприятной неожиданностью и привела к ошибке в программе, теперь придётся иметь её в виду при разработке.
Что делать, если всё же нужно работать с целым диапазоном, а не только с видимой его частью:
- Снимать фильтры, сохраняя предварительно критерии фильтрации в отдельном массиве/структуре, обрабатывать диапазон и ставить фильтры обратно.
- Перебирать диапазон по ячейкам.
- …
Изменено: - 23.10.2017 12:02:51