Выделить отфильтрованные строки

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Господа, вопрос по автофильтру.
Сортирую автофильтром список по нужному мне критерию.
Теперь нужно все отфильтрованные строки выделить, для дальнейшей работы (удаления). Чё-то ничегошеньки не получается :-(
Что можно сделать?
Спасибо.
Genyaa
Сообщения: 310
Зарегистрирован: 11 окт 2006, 17:24
Откуда: Moscow
Контактная информация:

Если речь о Екселе:
- выделить нужные (можно все) строки, отоборанные автофильтром
- F5 (или <Ctrl+G> или Меню-Правка-Перейти)
- в диалоге - Выделить
- в диалоге - Только видимые ячейки
- чтобы удалить выделенное - <Ctrl+-> или Меню-Правка-Удалить строку
- ОК
Всякое решение плодит новые проблемы.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Спасибо за столь быстрый ответ.
Виноват, торопился, некорректно задал вопрос - все описанное выше мне нужно сделать в коде Vba. Тем не менее, попробовал Ваш совет. К сожалению, не то.
Автофильтр у меня включается и выбирает в коде, считает кол-во строк (макрос взят с сайта pashulka), а вот выделить выбранное не получается.
Genyaa
Сообщения: 310
Зарегистрирован: 11 окт 2006, 17:24
Откуда: Moscow
Контактная информация:

Я не знаю, какой именно код с сайта Pashulka Вы используте. Но если речь идет именно об Автофильтре, то в коде должна быть инструкция, похожая на это:

Код: Выделить всё

    Workbooks(i).Worksheets(k).AutoFilter Field:=1, Criteria1:="4"
- где вместо Workbooks(i).Worksheets(k) может быть любая конструкция, возвращающая объект листа с автофильтром, а значения параметров Field и Criteria различны.

Видимо после этой инструкции должна быть часть кода, которая считает количество строк, отфильтрованных автофильтром. Так?

Если после подсчета количества строк нужно выделить все видимые строки (после фильтрации) и удалить их, то я бы сделал это так:

Допустим ws - это объектная переменная, возвращающая лист с нашим автофильтром, (например, Set ws = ActiveSheet)

Код: Выделить всё

    Set mr = ws.AutoFilter.Range.Offset(1, 0). _
        Resize(ws.AutoFilter.Range.Rows.Count - 1, ws.AutoFilter.Range.Columns.Count)
    mr.SpecialCells(xlCellTypeVisible).EntireRow.Delete
Здесь mr - будет областью Range Автофильтра на листе ws без строки заголовков.
А вторая инструкция удалит все строки выбранные автофильтром (т.е. видимые после выборки автофильтра). Если вместо слова Delete написать Select, то вместо удаления будет происходить выделение строк.
Всякое решение плодит новые проблемы.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Вот теперь ОНО!
Спасибо за помощь!
Ответить