5

是否有一种简单的方法可以同时更新单个 Excel 工作表上多个数据透视表的数据源?

所有数据透视表都引用相同的命名范围,但我需要创建第二个具有相同数据透视表但访问不同命名范围的工作表。

理想情况下,我希望能够进行某种搜索和替换操作(就像你可以在公式上做的那样),而不是手动更新每个单独的数据透视表。

有什么建议么?

4

4 回答 4

12

以下 VBA 代码将更改单个工作表上所有数据透视表的数据源。

您需要Sheet2使用新的数据透视表将参数更新为工作表的名称,并将参数更新Data2为新的命名范围。

Sub Change_Pivot_Source()

    Dim pt As PivotTable

    For Each pt In ActiveWorkbook.Worksheets("Sheet2").PivotTables
             pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create _
                (SourceType:=xlDatabase, SourceData:="Data2")
    Next pt

End Sub
于 2010-03-26T15:05:26.363 回答
1

假设您愿意使用 VBA,可能是相关的。

如果您遍历每个工作表上的数据透视表集合,您应该能够使用该帖子中显示的方法来修改数据源。语法应该非常类似于使用命名范围而不是单元格范围。

于 2010-03-26T11:59:45.837 回答
1

我结合了上面的代码,现在结合下面的代码,您可以对源数据使用表或范围引用。您所要做的就是通过替换*符号将源数据放入您的源数据中,然后您就可以开始了。

Sub Change_Pivot_Source()

Dim pt As PivotTable
Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets

For Each pt In ws.PivotTables
         pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create _
            (SourceType:=xlDatabase, SourceData:="*****")
Next pt
Next ws

End Sub
于 2020-02-14T12:54:23.440 回答
0

改编自使用此 VBA 宏代码动态更改数据透视表的数据源范围

  1. 可以设置通过方法设置的属性。PivotTable.SourceDataChangePivotCache
  2. 要创建一个新的PivotCache,调用ActiveWorkbook.PivotCaches.Create
  3. 您需要传入 aSourceType和 a Rangeas SourceData
  4. 最后,一旦更新,请确保调用RefreshTable以应用更改。

这是一个示例,它将自动查找工作簿中的每个数据透视表并对其进行更新。

Sub AdjustPivotDataRange()
    Dim pt As PivotTable, pc As PivotCache
    Dim dataSheet As Worksheet, ws As Worksheet
    Dim startPoint As Range, dataSource As Range, newRange As String

    ' get worksheet with data
    Set dataSheet = ThisWorkbook.Worksheets("Sheet1")

    ' Dynamically Retrieve Range Address of Data
    Set startPoint = dataSheet.Range("A1")
    Set dataSource = dataSheet.Range(startPoint, startPoint.SpecialCells(xlLastCell))
    newRange = dataSheet.Name & "!" & dataSource.Address(ReferenceStyle:=xlR1C1)

    ' create new PivotCache
    Set pc = ActiveWorkbook.PivotCaches.Create( _
               SourceType:=xlDatabase, _
               SourceData:=newRange)

    ' loop through all tables in all sheets
    For Each ws In ActiveWorkbook.Worksheets
        For Each pt In ws.PivotTables

            ' update pivot source and refresh
            pt.ChangePivotCache pc
            pt.RefreshTable

        Next pt
    Next ws

End Sub

只需替换"Sheet1"为您的数据源所在的位置。

于 2016-03-10T08:56:59.317 回答