【问题标题】:Excel 2013 VBA Pivot Table Filters will change but values wont showExcel 2013 VBA 数据透视表过滤器将更改但值不会显示
【发布时间】:2015-11-15 19:49:44
【问题描述】:

我正在开发一个具有 4 个级联组合框的仪表板,其中一个过滤下一个过滤下一个。它们连接到具有命名范围的链接单元格。

在另一个工作表上,我的数据透视表与我的组合框在同一页面上连接到数据透视图。

长话短说,因为一个组合框更改了我的数据透视表上的过滤器,从而更改了数据透视图。

我有两种方法,一种方法执行一半的时间,但它们都以相同的方式结束。我可以更改过滤器,但数据透视表不会显示值。

我已将其拼凑起来并进行了修改以满足我的需要。

Sub changeFilters()


Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim wsChart As Worksheet
Dim wsPivot As Worksheet
Dim selCat  As Variant
Dim selSub  As Variant
Dim selLoc  As Variant
Dim selCust As Variant


Set wsChart = ThisWorkbook.Sheets("CHART")
Set wsPivot = ThisWorkbook.Sheets("Pivot")
Set pt = ThisWorkbook.Sheets("Pivot").PivotTables("PT1")
Set selCat = ThisWorkbook.Sheets("CHART").Range("selCat")
Set selSub = ThisWorkbook.Sheets("CHART").Range("selSub")
Set selLoc = ThisWorkbook.Sheets("CHART").Range("selLoc")
Set selCust = ThisWorkbook.Sheets("CHART").Range("selCust")



pt.ManualUpdate = True

Application.ScreenUpdating = False

For Each pi In pt.PivotFields("CATEGORY").PivotItems

Select Case pi.Name
    Case [selCat]
        pi.Visible = True
    Case Else
        pi.Visible = False
    End Select
Next pi


 For Each pi In pt.PivotFields("SUB-CATEGORY").PivotItems

Select Case pi.Name
    Case [selSub]
        pi.Visible = True
    Case Else
        pi.Visible = False
    End Select
Next pi



For Each pi In pt.PivotFields("LOCATION").PivotItems
Select Case pi.Name
    Case [selLoc]
        pi.Visible = True
    Case Else
        pi.Visible = False
    End Select
Next pi



For Each pi In pt.PivotFields("CUSTOMER").PivotItems
Select Case pi.Name
    Case [selCust]
        pi.Visible = True
    Case Else
        pi.Visible = False
    End Select
Next pi


'turn on automatic update / calculation in the Pivot Table

pt.ManualUpdate = False
pt.PivotCache.Refresh


Application.ScreenUpdating = True

End Sub

【问题讨论】:

    标签: vba excel filtering pivot-table


    【解决方案1】:

    我相信我想通了!,继续下一期。解决方案是添加

    ThisWorkbook.Sheets("Pivot").PivotTables("PT1").ClearAllFilters 在组合框之前。

    以下修改代码。

    Option Explicit
    Sub changeFilters()
    
    
    Dim pt As PivotTable
    Dim pf As PivotField
    Dim pi As PivotItem
    Dim wsChart As Worksheet
    Dim wsPivot As Worksheet
    Dim selCat  As Variant
    Dim selSub  As Variant
    Dim selLoc  As Variant
    Dim selCust As Variant
    
    
    Set wsChart = ThisWorkbook.Sheets("CHART")
    Set wsPivot = ThisWorkbook.Sheets("Pivot")
    Set pt = ThisWorkbook.Sheets("Pivot").PivotTables("PT1")
    Set selCat = ThisWorkbook.Sheets("CHART").Range("selCat")
    Set selSub = ThisWorkbook.Sheets("CHART").Range("selSub")
    Set selLoc = ThisWorkbook.Sheets("CHART").Range("selLoc")
    Set selCust = ThisWorkbook.Sheets("CHART").Range("selCust")
    
    
    Application.ScreenUpdating = False
    pt.ManualUpdate = True
    
    ThisWorkbook.Sheets("Pivot").PivotTables("PT1").ClearAllFilters
    
    
    
     For Each pi In pt.PivotFields("CATEGORY").PivotItems
    
    Select Case pi.Name
        Case [selCat]
            pi.Visible = True
        Case Else
            pi.Visible = False
        End Select
    Next pi
    
    
    'Removes pivot items from pivot table except those cases defined below      (by looping through)
     For Each pi In pt.PivotFields("SUB-CATEGORY").PivotItems
    
    Select Case pi.Name
        Case [selSub]
            pi.Visible = True
        Case Else
            pi.Visible = False
        End Select
    Next pi
    
    
    
    For Each pi In pt.PivotFields("LOCATION").PivotItems
    Select Case pi.Name
        Case [selLoc]
            pi.Visible = True
        Case Else
            pi.Visible = False
        End Select
    Next pi
    
    
    
    For Each pi In pt.PivotFields("CUSTOMER").PivotItems
    Select Case pi.Name
        Case [selCust]
            pi.Visible = True
        Case Else
            pi.Visible = False
        End Select
    Next pi
    
    
    
    'turn on automatic update / calculation in the Pivot Table
    
    pt.ManualUpdate = False
     Application.ScreenUpdating = True
    
    
    
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      相关资源
      最近更新 更多