2017-01-22 236 views
0

在Stack Overflow,msdn,Ozgrid等这里经过一整天的研究之后,我终于辞职并在这里问我的问题。VBA PivotField CurrentPage问题 - 过滤器工作于“2018”,但不是“2017”

我有一些透视图显示数据透视表的值。图表在一张表中,在另一张表中透视表。在第三个工作表中,我有一个允许用户选择“2017”或“2018”的下拉菜单。基于答案,它过滤使用下面的代码的所有数据透视表:

Worksheets(8).PivotTables("Table1").PivotFields("Year").CurrentPage = year_target 
Worksheets(8).PivotTables("Table2").PivotFields("Year").CurrentPage = year_target 
Worksheets(8).PivotTables("Table3").PivotFields("Year").CurrentPage = year_target 

现在,如果我选择“2018”,所有的数据透视表和图表更新,但如果我选择“2017年”我的错误:

Run-time error '5': Invalid procedure call or argument 

变量year_target根据选择很好地更新到2017年和2018年,我也尝试了硬编码值而不是变量 - 再次2018年效果不错,但不2017年。如果我去手动点击“2017”数据透视表(即不使用VBA)它工作正常,透视表和图表过滤器预期在2017年。数据透视表存在名称“Table1”等。我的c包括问题是在CurrentPage函数中的某个地方(?)

你对解决方案有任何想法吗? 会很感激!

截图:1

编辑:一个星期后,我现在终于设法得到它的权利。我从未找到根本原因。我重新格式化并重新命名了所有内容,围绕数据透视表移动,为每个数据透视表创建新图表和新图表,以及我能想到的所有其他内容,并突然使其运行。我最好的猜测是有一些旧的格式被隐藏在某处,我在拼命去除的努力中。感谢您的支持。

+0

看看我的答案和下面的代码,让我知道它的工作 –

+0

我建议你录制宏,而今年手动更改所有三个数据透视表“,然后查看结果代码以查看是否有任何突出显示。也许在这里发布结果代码。 – jeffreyweir

+0

@jeffreyweir我记录了下面的代码:。 子Macro6() ActiveSheet.PivotTables( “PivotTable5”)透视字段( “年”)当前页= “(全部)” 随着ActiveSheet.PivotTables( “PivotTable5” ).PivotFields( “年”) .PivotItems( “2017年”)。可见=假 .PivotItems( “2018”)。可见=真 尾随着 结束小组 当我跑重置过滤器和跑Macro6我收到以下错误: 运行时错误'1004': 无法获取数据透视表类的PivotFields属性 – sixty

回答

0

也许尝试先删除所有现有的年份过滤器(即 - 再次显示所有年份),然后过滤一年。这可能是因为你已经在2018年过滤了,新的过滤器(2017)正在尝试仅在2018年的结果中进行过滤。

+0

感谢您的回复。我确实尝试了这种方法,无论是手动点击工作表中的数据透视表,还是自动使用VBA代码,如Shai在他的评论中所建议的那样。即使代码完全一样,2017年和2018年之间似乎也有一些区别... – sixty

+0

看起来您有3个数据透视表。你确定所有3个都有2017年的价值吗?也许其中一个表没有任何年份是2017年,所以它导致了一个错误? –

+0

我实际上有6个数据透视表,即使它们都具有“2017”值(它们都可以手动过滤“2017”),它们都有相同的问题。我尝试在VBA代码中切换它们的顺序,并且通过单独的宏一次更新它们,但无济于事 – sixty

0

尝试类似下面的代码:

Dim PvtTbl As PivotTable 

For Each PvtTbl In Worksheets(8).PivotTables '<-- loop through all Pivot Tables in worksheet(8) 
    With PvtTbl 
     .PivotFields("Year").CurrentPage = "(All)" '<-- reset all filters 

     On Error Resume Next 
     .PivotFields("Year").CurrentPage = year_target '<-- set to current year's filter 
     If Err.Number <> 0 Then '<-- no values found for current year 
      MsgBox "No values found for the year " & year_target 
     End If 
     On Error GoTo 0 
    End With 
Next PvtTbl 
+0

感谢您的快速回复。我尝试添加这些行并收到相同的错误: 运行时错误'5':无效的过程调用或参数 调试时出现以下错误代码行: .PivotFields(“Year”)。CurrentPage = “(全部)”'< - 重置所有过滤器 – sixty

+0

@sixty您可以在您的文章中添加数据透视表的屏幕截图吗?试图手动设置“年份”透视字段?那面对你在这条线上得到一个错误让我觉得错误来自某种类型的错误或类似 –

+0

我添加了一个截图。该领域实际上被称为“Año”,但为了简单起见,我将其描述为“年”。当然,我在上面提到的代码中改回了Año。不确定此截图是否您所期望的?我同意你的看法,认为这个问题很可能是由于2017年到2018年之间的类型错误造成的,但我不知道如何识别它。 – sixty