我正在做一个项目,每月在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中已经有数据。您要替换它吗?此后,数据透视表的输出错误,并且假定的静态数据透视过滤器也不再存在。
我确保数据透视表之间有足够的空间,并且不能有任何重叠。我已经有很长时间了,并且不知道如何解决它,所以我们将不胜感激。
答案 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
当然,如果要排除任何工作表或数据透视表,则可以轻松地施加限制。这样做的好处是,它不仅可以按块(按工作表)对所有表进行处理,而且如果添加,删除或重命名了表,则在查找特定表时也不会崩溃。