使用VBA刷新数据透视表

时间:2019-02-13 11:30:15

标签: excel vba pivot pivot-table

我正在做一个项目,每月在Sheet1中转储数据。在我的工作表分析中,我有三个数据透视表,使用某些过滤器来汇总此数据,即使原始数据发生更改,这些数据也应保持不变。

我使用以下VBA代码在数据转储后更新数据透视表。

Private Sub CommandButton1_Click()


With ThisWorkbook.Worksheets("Analysis")

.PivotTables("PivotTable1").RefreshTable
.PivotTables("PivotTable2").RefreshTable

End With

Sheets("Output").Activate

End Sub

问题是,只要我在工作表1中有一个新的数据转储,然后运行代码,就会收到以下消息: [Dokument1] Analysis中已经有数据。您要替换它吗?此后,数据透视表的输出错误,并且假定的静态数据透视过滤器也不再存在。

我确保数据透视表之间有足够的空间,并且不能有任何重叠。我已经有很长时间了,并且不知道如何解决它,所以我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

请勿使用ActiveSheet。我认为最好使用create with语句来引用您想要的工作表,并使用“全部刷新”而不是一个接一个地刷新。

Option Explicit

Sub test()

    With ThisWorkbook.Worksheets("Sheet1")

        .RefreshAll

    End With

End Sub

答案 1 :(得分:1)

这是循环浏览所有工作表并刷新所有数据透视表的好方法:

Dim ws As Worksheet
Dim pt As PivotTable

For Each ws In wb.Sheets
  For Each pt In ws.PivotTables
    pt.PivotCache.Refresh
  Next pt
Next ws

当然,如果要排除任何工作表或数据透视表,则可以轻松地施加限制。这样做的好处是,它不仅可以按块(按工作表)对所有表进行处理,而且如果添加,删除或重命名了表,则在查找特定表时也不会崩溃。