сохранить критерии фильтра столбца даты таблицы - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь сохранить фильтры из таблицы, в которой включен FilterMode, чтобы восстановить их после некоторой проделанной работы. Как сохранить критерии фильтра для таблицы Excel столбец даты , если AutoFilterDateGrouping равно true ? Я всегда получаю

error (1004) trying to read .Criteria1 or .Criteria2 values for .Operator = 7 (xlFilterValues)

Используя этот код:

FilterArray(i, 1) = .Criteria1 или FilterArray(i, 1) = .Criteria2

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Спасибо, Навин,

Я использую Excel 2013 и ... извините, но запуск кода дал мне ту же ошибку (1004) в строке "filterArray (f, 1) = .Criteria1" (речь идет о столбце Date ).

Дело в том, что для столбца Date есть фильтр, основанный на группировке дат по годам ( AutoFilterDateGrouping имеет значение true ) и .Operator 7 решение, которое вы дали, не работает.

Я думаю, что оно не сработало, потому что для столбцов Date нет .Criteria1 или .Criteria2.

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

Единственное найденное мной "решение" - это добавить новую строку внутри таблицы с помощью Вставьте метод из Range (FullRow).

Не элегантно, но работает.

До сих пор я не смог найти правильные свойства (авто) фильтра для Дата Столбец таблицы.

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

Попробуйте это:

Sub ReDoAutoFilter()
Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String
Dim col As Integer

Set w = ActiveSheet

' Capture AutoFilter settings
With w.AutoFilter
    currentFiltRange = .Range.Address
    With .Filters
        ReDim filterArray(1 To .Count, 1 To 3)
        For f = 1 To .Count
            With .Item(f)
                If .On Then
                    filterArray(f, 1) = .Criteria1
                    If .Operator Then
                        filterArray(f, 2) = .Operator
                        filterArray(f, 3) = .Criteria2
                    End If
                End If
            End With
        Next f
    End With
End With
w.AutoFilterMode = False

' Code here

' Restore Filter settings
For col = 1 To UBound(filterArray(), 1)
    If Not IsEmpty(filterArray(col, 1)) Then
        If filterArray(col, 2) Then
            w.Range(currentFiltRange).AutoFilter field:=col, _
            Criteria1:=filterArray(col, 1), _
            Operator:=filterArray(col, 2), _
            Criteria2:=filterArray(col, 3)
        Else
            w.Range(currentFiltRange).AutoFilter field:=col, _
            Criteria1:=filterArray(col, 1)
        End If
    End If
Next col
End Sub
...