Получить весь список возможных критериев фильтрации

Из VBA мне нужно знать список всех критериев, которые я могу выбрать в столбцах фильтрации. Например, следующий список: [1-АЛЬФА;2-БЕТА;...5-ETC]

введите здесь описание изображения


person daniele3004    schedule 21.04.2015    source источник
comment
Вам нужны текущие критерии или вам нужны полные критерии при условии, что больше ничего не отфильтровано??   -  person Gary's Student    schedule 21.04.2015
comment
Я не уверен, относитесь к этой информации с осторожностью, но я думаю, что то, что вы там видите, написано методом AutoFilter класса Range во время выполнения. То есть, насколько мне известно, объект, имеющий в качестве свойства полный список доступных критериев, никогда не создается — следовательно, вы не можете получить этот список из него. Другими словами, вам, возможно, придется реализовать собственный Loop для создания собственной коллекции. Но опять же, не уверен, так что давайте еще немного подождем, прежде чем писать какой-либо код.   -  person Matteo NNZ    schedule 21.04.2015
comment
Спасибо за редактирование!!   -  person Gary's Student    schedule 21.04.2015


Ответы (1)


Скажем, у нас есть такие данные, как:

введите здесь описание изображения

и мы фильтруем размер для большой, и мы хотим перечислить критерии для столбца A:

Sub ShowCriteria()
    Dim r As Range, c1 As Collection, c2 As Collection
    Dim msg As String
    Set c1 = New Collection
    Set c2 = New Collection

    Dim LastRow As Integer

    With Worksheets("sheet1")
        LastRow = .Range("A" & Worksheets("sheet1").Rows.Count).End(xlUp).Row
    End With



    On Error Resume Next
    For Each r In Range("A2:A" & LastRow)
        v = r.Value
        c1.Add v, CStr(v)
        If r.EntireRow.Hidden = False Then
            c2.Add v, CStr(v)
        End If
    Next
    On Error GoTo 0

    msg = "Full criteria"
    For i = 1 To c1.Count
        msg = msg & vbCrLf & c1.Item(i)
    Next i

    msg = msg & vbCrLf & vbCrLf & "Visible criteria"
    For i = 1 To c2.Count
        msg = msg & vbCrLf & c2.Item(i)
    Next i

    MsgBox msg
End Sub

Будет отображаться:

введите здесь описание изображения

person Gary's Student    schedule 21.04.2015
comment
Вот что я имел в виду, я думаю, что набор критериев изначально недоступен, и вам нужно создать его самостоятельно, начиная с данных. Но я думаю (вероятно, из соображений эффективности) OP хотел знать, хранятся ли они где-то как свойство существующего объекта: - person Matteo NNZ; 21.04.2015
comment
@MatteoNNZ Я думаю, вы правы.............. если мне нужно управлять AutoFilter с помощью VBA, я обычно собираю критерии, прежде чем применять любой из этих критериев. - person Gary's Student; 21.04.2015
comment
@pnuts Вы правы!! .................Мне также нужно что-то лучше, чем MsgBox - person Gary's Student; 21.04.2015