VBA: фильтрация и сортировка существующего ассортимента автофильтров - PullRequest
0 голосов
/ 27 февраля 2019

Скажем, у меня есть лист Excel, который содержит информацию о моей музыкальной коллекции.Я написал 2 макроса: первый сортирует список по исполнителю, альбому и номеру дорожки, а второй сортирует список по жанру и названию песни.Вот как выглядят макросы:

ThisWorkbook.Sheets("Music").ShowAllData
With ThisWorkbook.Sheets("Music").AutoFilter.Sort
    .SortFields.Clear
    .SortFields.Add Range("A:A"), xlSortOnValues, xlAscending, , xlSortNormal
    .SortFields.Add Range("B:B"), xlSortOnValues, xlAscending, , xlSortNormal
    .SortFields.Add Range("C:C"), xlSortOnValues, xlAscending, , xlSortNormal
    .Header = xlYes
    .MatchCase = False
    .SortMethod = xlPinYin
    .Apply
End With

Я хочу добавить строку, которая фильтрует определенный жанр, например:

ThisWorkbook.Sheets("Music").AutoFilter Field:=5, Criteria1:="Rock"

Эта строка не работает из-за рабочего листа.Метод AutoFilter не принимает те же аргументы, что и метод Range.Autofilter.Кто-нибудь знает способ обойти это, что не включает в себя выключение фильтра, определение диапазона данных, применение нового фильтра, а затем сортировку этого?

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете использовать любой диапазон ячеек, даже один, без диапазона уже определенного автофильтра.

Option Explicit

Sub add_filter_2_existing_autofilter()
Dim FilterRange As Range

    ThisWorkbook.Sheets("Music").Select

    'ShowAllData - error if no filter is set
    On Error Resume Next
    ActiveSheet.ShowAllData
    On Error GoTo 0

    'These do not work
    'ThisWorkbook.Sheets("Music").AutoFilter Field:=5, Criteria1:="Rock"
    'ThisWorkbook.Sheets("Music").FilterRange.AutoFilter Field:=5, Criteria1:="Rock", Operator:=xlFilterValues

    Set FilterRange = Sheets("Music").AutoFilter.Range
    FilterRange.AutoFilter Field:=5, Criteria1:="Rock", Operator:=xlFilterValues

    'OR one of the following equivalents, which also work:
    'ThisWorkbook.Sheets("Music").Range(FilterRange.Address).AutoFilter Field:=3, Criteria1:="Rock", Operator:=xlFilterValues
    'ThisWorkbook.Sheets("Music").Range("A1").AutoFilter Field:=5, Criteria1:="Rock", Operator:=xlFilterValues
    'ThisWorkbook.Sheets("Music").Range("A1000").AutoFilter Field:=5, Criteria1:="Rock", Operator:=xlFilterValues
    'ThisWorkbook.Sheets("Music").Range("XFD1").AutoFilter Field:=5, Criteria1:="Rock", Operator:=xlFilterValues

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...