VBA 多个数据透视表的脚本

VBA script for multiple pivot tables

我每周都会更换源数据,并附有许多数据透视表 table。但是,当我刷新 tables 时,它们开始丢失一些数据。所以,我继续记录一些 "macros" 来创建和替换新的枢轴 table 每次。粘贴的区域将保持不变,我给了它们足够的周围空间,不会重叠。不幸的是,我遇到了很多错误,并且对 VBA 一点也不擅长。我只是从论坛等那里知道的

源数据在"CopyData" 国家数据透视表应该继续 "Country"

所以我的问题是: 1. 我如何创建一个 VBA 脚本来创建和替换枢轴 tables 并且可以在之后多次使用(所以也许从删除旧枢轴开始?) 2. 我怎样才能使主元 table 的名称保持通用?不知道下一个支点table在运行

时会叫什么

任何帮助都会很棒!

下面是我的 "macros" 之一的代码,它应该创建并替换两个 pivot tables。

   Sub Pivots_Country()
' Pivots_Country Macro
'
'
    Range("B215").Select
    ActiveWorkbook.Worksheets("Region").PivotTables("PivotTable10").PivotCache. _
        CreatePivotTable TableDestination:="Sheet1!R2C2", TableName:="PivotTable10" _
        , DefaultVersion:=xlPivotTableVersion14
    Sheets("Sheet1").Select
    Cells(2, 2).Select
    ActiveSheet.PivotTables("PivotTable11").AddDataField ActiveSheet.PivotTables( _
        "PivotTable11").PivotFields("storeId"), "Count of storeId", xlCount
    With ActiveSheet.PivotTables("PivotTable11").PivotFields("NewCountry")
        .Orientation = xlRowField
        .Position = 1
    End With
    Sheets("CopyData").Select
    Range("B10").Select
    ActiveWorkbook.Worksheets("Sheet1").PivotTables("PivotTable11").PivotCache. _
        CreatePivotTable TableDestination:="Sheet1!R4C6", TableName:="PivotTable12" _
        , DefaultVersion:=xlPivotTableVersion14
    Sheets("Sheet1").Select
    Cells(4, 6).Select
    With ActiveSheet.PivotTables("PivotTable12").PivotFields("plan")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable12").PivotFields("planCode")
        .Orientation = xlPageField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable12").PivotFields("NewCountry")
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveSheet.PivotTables("PivotTable12").AddDataField ActiveSheet.PivotTables( _
        "PivotTable12").PivotFields("storeId"), "Count of storeId", xlCount
    ActiveWindow.SmallScroll Down:=-7
    Range("B2:C56").Select
    Selection.Copy
    Sheets("Country").Select
    Range("B4").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=7
    ActiveWindow.SmallScroll ToRight:=-2
    ActiveWindow.SmallScroll Down:=-2
    ActiveWindow.SmallScroll ToRight:=-1
    ActiveWindow.SmallScroll Down:=-1
    ActiveWindow.SmallScroll ToRight:=-2
    ActiveWindow.SmallScroll Down:=-30
    Sheets("Sheet1").Select
    ExecuteExcel4Macro "(""PivotTable12"",""planCode"",3,FALSE,TRUE)"
    Range("F2:P52").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Country").Select
    ActiveWindow.SmallScroll ToRight:=3
    ActiveWindow.SmallScroll Down:=-1
    ActiveWindow.SmallScroll ToRight:=2
    Range("R3").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=1
    Range("Q15").Select
    Sheets("Sheet1").Select
    Cells.Select
    Range("F2").Activate
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Range("J11").Select
    Sheets("CopyData").Select
End Sub

您真的不需要重新创建枢轴 table。刷新数据后,您需要找出数据透视表 tables 中缺少数据的原因。这应该会少很多工作。

我怀疑数据透视表 tables 正在从一个范围内获取数据,当您刷新数据时,新数据的行数比旧数据多,因此数据透视表 tables 错过了额外的行。

解决此问题的最佳方法是确保您对 table 进行数据透视的最佳方法是基于一个范围,该范围有足够的行来容纳您放入 sheet.[=10 中的所有当前和未来数据。 =]

检查枢轴 table。

  1. 单击枢轴 table

  2. in ribbon>Pivot table tools>analyse>data>Change data source 你可以看到范围是什么(并改变它)

请告诉我你的进展情况。

将来您可能会考虑使用 excel tables(也称为 ListObjects)

例如

  1. select 包含您的数据的范围

  2. 单击功能区>插入>Table 按钮将范围转换为 excel table。

  3. 将数据透视表 tables 更改为 tables

  4. 中的参考数据
  5. 更改刷新数据的方式。

由于您是 excel 的新手,我现在不会使用 Excel tables,先让它工作,然后再转换以使用它们。

希望对您有所帮助。 哈维