Значения фильтра VBA в сводной таблице из значений, хранящихся в диапазоне динамических c - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь выбрать только значения в сводной таблице1 из значений, хранящихся в диапазоне «str», исключая любой пробел в фильтре, выполнив следующий код, я не получаю значения в фильтре. Причина - проблема с этим кодом, и есть ли альтернативное решение для моих требований.

Dim star As String
Dim startRange As String
Dim lastRange As String

startRange = ThisWorkbook.Sheets("Peer Code").Range("J2").Address

lastRange = ThisWorkbook.Sheets("Peer Code").Range("J" & LR0).Address

 star = startRange & ":" & lastRange

 ThisWorkbook.Sheets("Conso_Input").Activate
 Dim PI As PivotItem
  
 With 
 Worksheets("Conso_Input").PivotTables("PivotTable1").PivotFields("FundCode")
    .ClearAllFilters
    For Each PI In .PivotItems
        PI.Visible = WorksheetFunction.CountIf(Range(star), PI.Name) > 0
    Next PI
 End With 

Новый код

     ThisWorkbook.Sheets("Peer Code").Activate
    Dim LR0 As Integer
   LR0 = Range("J" & Rows.Count).End(xlUp).Row
Dim star As String
Dim startRange As String
Dim lastRange As String

startRange = ThisWorkbook.Sheets("Peer Code").Range("J2").Address

lastRange = ThisWorkbook.Sheets("Peer Code").Range("J" & LR0).Address

 star = startRange & ":" & lastRange

ThisWorkbook.Sheets("Conso_Input").Activate

    Dim PvtTbl As PivotTable
    Dim PvtFld As PivotField
    Dim PI As PivotItem
    Dim MatchFound As Boolean, i As Long
    
    ' set the Pivot Table
    Set PvtTbl = 
   ThisWorkbook.Sheets("Conso_Input").PivotTables("PivotTable1")
    
    ' set the Pivot Field
    Set PvtFld = PvtTbl.PivotFields("FundCode")
    
   ThisWorkbook.Sheets("Conso_Input").Activate
   
   PvtTbl.ClearAllFilters
   
   For Each PI In PvtFld.PivotItems
   'For Each PI In .PvtTbl.PivotItems
   
        PI.Visible = WorksheetFunction.CountIf(Range(star), PI.Name) > 0
   Next PI

1 Ответ

0 голосов
/ 10 июля 2020

Попробуйте что-то вроде этого:

Dim wsPC As Worksheet, wsCI As Worksheet
Dim PvtTbl As PivotTable, rngStar As Range
Dim PvtFld As PivotField, PI As PivotItem, m

Set wsCI = ThisWorkbook.Sheets("Conso_Input")
Set wsPC = ThisWorkbook.Sheets("Peer Code")

Set rngStar = wsPC.Range("J2:J" & wsPC.Cells(Rows.Count, "J").End(xlUp).Row)

Set PvtTbl = wsCI.PivotTables("PivotTable1")
PvtTbl.ClearAllFilters
Set PvtFld = PvtTbl.PivotFields("FundCode")
For Each PI In PvtFld.PivotItems
    m = Application.Match(PI.Name, rngStar, 0)
    PI.Visible = Not IsError(m)
Next PI
...