运行时错误-2147024809(80070057) - 数据透视表字段名称无效

时间:2017-06-12 08:51:13

标签: excel vba excel-vba

另一个Excel VBA宏按钮问题。

我正在尝试按下按钮来刷新工作表上的所有枢轴(有四个)。我之前去过StackOverflow并收到了一个运行良好的解决方案。我使用了之前提供的代码并为新工作簿更新了它,但是下面的代码失败了.ChangePivotCache PvtCache:

getPis() {
  this.pisService.getPis()
      .subscribe(
      pis => { this.pis = pis;},
      error => this.errorMessage = <any>error);}

唯一的区别是工作簿发生了变化,现在我想刷新4个枢轴而不是2个 - 这可能是问题吗?

在屏幕截图下方,您可以看到工作表。 &#34; OTR_Promo_List_ADV-2017&#34;是数据库。数据透视表有默认命名,我没有更改名称(即PivotTable1,PivotTable2 ......)

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:0)

用于刷新一张表上所有数据透视表的代码似乎过于复杂。我不太明白你为什么要使用.ChangePivotCache。它更改指定数据透视表的数据源。如果您只想刷新数据透视表,那就完全没有根据了。

您可以使用Excel Table对象作为数据透视表的数据源,然后进行简单的刷新就足够了。或者,如果您不想使用表格(尽管您可能真的想查看,显而易见),您可以使用动态范围名称来定义数据透视表源。使用这两种技术,您只需刷新数据透视表,就不必使用VBA操纵数据透视缓存。

使用表格或动态范围名称作为数据透视表的来源,您可以循环浏览工作表上的所有数据透视表,并使用以下代码中的代码刷新它们:

Sub RefreshPivotsOnSheet()
    Dim ws As Worksheet
    Dim pt As PivotTable
    Set ws = Worksheets("MySheet")
    For Each pt In ws.PivotTables
        pt.RefreshTable
    Next pt
End Sub

编辑:如何将Excel Tables设置为数据透视表的数据源:使用Ctrl + T或Insert&gt;将源数据转换为表格。表。然后编辑数据透视表数据源并将其指向刚刚创建的Excel表。

答案 1 :(得分:-1)

我能够结束这个话题。我在其他地方找到了一个简单的宏,只说:

Sub REFRESH()
'
' REFRESH Macro
'

'
    ActiveWorkbook.RefreshAll
End Sub

似乎可以解决这个问题。

感谢您的所有投入!