如何在Excel数据透视表自动更新后自动刷新Excel自动筛选结果

时间:2017-01-25 16:36:57

标签: excel vba excel-vba pivot-table autofilter

我使用Excel数据透视表创建了“摘要”标签。

数据透视表显示存储在“详细信息”选项卡中的各种类别中所选值的总和。

“详细信息”标签包含...

Select?   Type   Price
   Y      Shoe   $1.25
   N      Shoe   $1.50
   Y      Boot   $2.00
   N      Clog   $3.00
   Y      Shoe   $0.50

“摘要”选项卡显示像这样的数据透视表......

Select?       Y

Row Labels    Sum of Price
Boot          $2.00
Shoe          $1.75

只要在“详细信息”标签中更改了某些内容,并且有人切换到“摘要”标签,我就希望数据透视表自动更新以匹配新数据。

如果仅更改值(使用下面的第一个代码段),这很容易,但如果Y和N发生更改,则过滤不会更新。在手动更新过滤之前,不会显示从N更改为Y的任何内容。

这就是我到目前为止......

自动更新数据透视表的代码例如是...

Private Sub Worksheet_Activate()
    Sheets("Summary").PivotTables("PivotTable1").RefreshTable
End Sub

自动刷新表格中的Excel自动过滤列(即数据透视表)的代码是例如...

Private Sub Worksheet_Change(ByVal Target As Range)
    With ActiveWorkbook.Worksheets("Details").ListObjects("Table1")
         .AutoFilter.ApplyFilter
    End With
End Sub

...但我无法弄清楚如何将AutoFilter.ApplyFilter应用于数据透视表。有任何想法吗?或者等价?

我发现接触数据透视表过滤器的最近的东西是这个代码,它将把我要更新的部分变成黄色......

Worksheets("Details").PivotTables("PivotTable1") _
    .PageRange.Interior.Color = vbYellow

...但我不想把它变成黄色:-),我想重新应用过滤器到修改过的数据,所以我看到应该看到的是什么,而不是错误的值和缺少的行。

非常感谢。

2 个答案:

答案 0 :(得分:0)

我能想到的两件事......在激活或停用工作表时运行宏。

Private Sub Worksheet_Activate()
Worksheet_Change 'Macro name
End Sub

这将与您的摘要表格特别相关。同样,您可以使用与其他工作表绑定的Worksheet_Deactivate()。您还可以将数据透视表更新引入此同一个宏。

答案 1 :(得分:0)

录制宏的结果(不更新过滤器,但重新应用过滤选择" Y")并将其编辑为...

Private Sub Worksheet_Activate()
    ActiveSheet.PivotTables("PivotTable1").RefreshTable
    On Error Resume Next
        ActiveSheet.PivotTables("PivotTable1").PivotFields("Selection") _
    .CurrentPage = "Y"
End Sub

它对我有用。我不得不添加On Error(笨拙地)抓住没有" Y"过滤。

如果有人需要更通用的解决方案来刷新过滤而不重新应用特定的过滤器选择,则上述操作无效,但在我的用例中没有问题。

非常感谢。