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

Моя цель - отфильтровать сводную таблицу, используя диапазон на другом листе.

Моя сводная таблица находится в рабочих листах («Отчет о старении»).

Мои справочные данные, с помощью которых я хочуФильтр находится в столбцах A2 и далее в рабочих листах («Инструкции»).

Приведенный ниже код работал с таблицей, в которой не было сводной таблицы.

Мне нужно взять значение из A2, затем отфильтровать(«Идентификатор клиента»), экспорт в Excel, сохранение и т. д. со значениями в A3, A4, A5.

Sub Pivotfilter()

Dim varItemsToReplace As Variant
Dim varItem As Variant
Dim wksSource As Worksheet
Dim wksDest As Worksheet
Dim rngSource As Range
Dim rngSource2 As Range
Dim rngCell As Range

Set wksSource = Worksheets("Instructions")
Set wksDest = Worksheets("Aging Report")

With wksSource
    Set rngSource = .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
End With

For Each rngCell In rngSource
    With wksDest
        ActiveSheet.PivotTables("PivotTable40").PivotFields ("Client ID")
        .PivotFields(rngCell.Value).Visible = True
        Dim wb As Workbook
        Set wb = Workbooks.Add
        Windows("XXXXXXX").Activate
        Sheets("Aging Report").Select
        Sheets("Aging Report").Copy Before:=wb.Sheets(1)
        wb.SaveAs "C:\Users\XXX\Desktop\SOA\" & .Range("B3").Value & " - " & .Range("B4").Value & ".xlsx"
        wb.Close
        Windows("XXXXXXX.xlsm").Activate
    End With
Next rngCell

End Sub

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Для фильтрации по значению мой предпочтительный метод состоит в том, чтобы добавить больше столбцов к самим данным, задать значения по формулам и добавить эти столбцы в сводную таблицу

Например, столбец Область логический добавлен в сводный фильтр, фильтртолько на true

Добавление столбца старения 30/60/90, добавьте его в сводную строку для группировки по возрасту

и т. д.

Это позволяет избежать сложности игл, комбинируя дваменее известные области знаний vba в целом и vba специально для опорных точек

0 голосов
/ 24 декабря 2018

Некоторые полезные рекомендации:

Необработанные данные:

enter image description here

Выберите данные и создайте сводную таблицу с именем "pvtTest" вЩет 5

Попробуйте:

Option Explicit

Sub test()

    Dim pvt As PivotTable
    Dim Pf As PivotField
    Dim strFilter As String

    'Assign to variable "pvt" the pivot table to work with it
    Set pvt = Worksheets("Sheet5").PivotTables("pvtTest")

    'Assigh to "strFilter" the string to filter
    strFilter = "A"

    'Use column "Shop" as a filter of pivot table
    pvt.PivotFields("Shop").Orientation = xlPageField

    'Assign by which column the pivot table will be filtered
    Set Pf = Worksheets("Sheet5").PivotTables("pvtTest").PivotFields("Shop")

    'Clear filter previous choices
    Pf.ClearAllFilters

    'Select to filter the pivot table based on the value of "strFilter"
    Pf.CurrentPage = strFilter

End Sub
...