使用VBA基于另一个过滤器调整数据透视表过滤器

时间:2014-06-06 14:01:53

标签: excel vba

我想要的是什么:我有两个不同的数据透视表使用过滤器。两者都在日期上过滤但具有不同的源数据(其中日期部分重叠)。我希望第二个过滤器在第一个过滤器发生变化时采用与第一个过滤器相同的值(日期)。

我尝试了什么:我在互联网上尝试了无数的解决方案,但是没有一个能够正常工作。最接近工作的那些:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Sheets("Daganalyse_tables").PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters
    Sheets("Daganalyse_tables").PivotTables("PivotTable1").PivotFields("Date").CurrentPage = Range("D2").Text
End Sub`

其中D2是第一个过滤器的位置。这不断给我一个“运行时错误1004:应用程序定义的或对象定义的错误”#39;我在很多变化中试过这个,不断给我1004错误。

我尝试的第二件事更简单:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Sheets("Daganalyse_tables").Range("F1") = Range("D2")
End Sub

其中F1是第二个过滤器的位置。这个告诉我' 41667不是该字段的项目,换句话说,它将日期转换为其数字。当使用Format()或将随机日期作为String输入时,仍会发生这种情况。

有人知道如何做到这一点吗?它似乎很容易,但Excel似乎有问题(在2013年和2010年尝试过)。提前谢谢!

2 个答案:

答案 0 :(得分:0)

请参阅

Filtering between two dates in pivot table using VBA. UK to US date format issue

提示:

Sheets("Daganalyse_tables").PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters
Sheets("Daganalyse_tables").PivotTables("PivotTable1").PivotFields("Date").CurrentPage = CLNG(Range("D2").VALUE)
                                                                                         ^^^^^^^^^^^^^^^^^^^^^^^

答案 1 :(得分:0)

经过多次尝试后,我找到了解决方案。

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Worksheets("Daganalyse_tables").PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters
    Worksheets("Daganalyse_tables").PivotTables("PivotTable1").PivotFields("Date").CurrentPage = _
        ActiveSheet.PivotTables("PivotTable14").PivotFields("Date").CurrentPage.Name
End sub

对单元格的引用不起作用,我必须实际引用第二个数据透视表中的CurrenPage.Name。