Excel VBA для установки фильтра сводной таблицы со значениями между начальным и конечным значением - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь установить фильтры в сводной таблице.Значения фильтра сводной таблицы варьируются от 1 до 16. Если начальное значение = 5 и конечное значение = 10, необходимо установить для сводных фильтров значение 5,6,7,8,9,10.Вот код, который у меня есть.Он выбирает значения фильтра от 1 до 10. Я хочу, чтобы код выбирал от 5 до 10. Пожалуйста, помогите

Sub Macro1()    
    s = CStr(Range("J1").Value) 'start
    e = CStr(Range("K1").Value) 'end    
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("WK")
        .ClearAllFilters
        .EnableMultiplePageItems = True
        For i = 1 To .PivotItems.Count
            MsgBox .PivotItems(i).Name
            If .PivotItems(i).Name < s And .PivotItems(i).Name > e Then
                .PivotItems(.PivotItems(i).Name).Visible = False
            End If
        Next i
    End With
End Sub

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Если PivotField "WK" является полем Row или Column, то цикл не требуется;Вы можете просто применить фильтр к PivotField.Это также хорошая идея, чтобы квалифицировать ссылки на диапазон с помощью рабочего листа.

Sub foo()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    With ws.PivotTables("PivotTable1").PivotFields("WK")
        .ClearAllFilters
        .PivotFilters.Add2 _
            Type:=xlCaptionIsBetween, _
            Value1:=ws.Range("J1").Value, _
            Value2:=ws.Range("K1").Value
    End With
End Sub

Если PivotField "WK" является полем Page, то вам нужно выполнить цикл - но вы путаете ваши типы данных,и вы применили оператор И, где вы имеете в виду ИЛИ.Вы можете попробовать это:

Sub FilterPageField()
    Dim pt As PivotTable
    Dim pf As PivotField
    Dim pi As PivotItem
    Dim lPi As Long
    Dim lStart As Long
    Dim lEnd As Long

    lStart = CLng(ActiveSheet.Range("J1").Value)
    lEnd = CLng(ActiveSheet.Range("K1").Value)
    Set pt = Sheet1.PivotTables("PivotTable1")
    Set pf = pt.PivotFields("WK")

    pf.ClearAllFilters
    For Each pi In pf.PivotItems
        lPi = CLng(pi.Caption)
        pi.Visible = lPi >= lStart And lPi <= lEnd
    Next pi
End Sub
0 голосов
/ 13 июня 2018

Я не уверен, что это именно тот ответ, который может быть решением ...

Что я обычно делаю для такого рода проблем, это добавление столбца помощника / фильтра к исходным данным.Что-то с эффектом

if(and(source_data_col<j1,source_data_col>k1),true,false)  

Затем добавьте этот столбец в фильтр сводной таблицы.

...