【问题标题】:VBA script for multiple pivot tables多个数据透视表的 VBA 脚本
【发布时间】:2015-08-09 12:00:22
【问题描述】:

我每周都会更换源数据,并附有许多数据透视表。但是,当我刷新表格时,它们开始丢失一些数据。因此,我继续记录了一些“宏”,以每次创建和替换新的数据透视表。粘贴的区域将保持不变,我给了它们足够的周围空间,使它们永远不会重叠。不幸的是,我遇到了很多错误,而且根本不擅长使用 VBA。我只知道论坛等。

源数据在“CopyData”上 国家/地区数据透视表应位于“国家/地区”

所以我的问题是: 1.如何创建一个 VBA 脚本来创建和替换数据透视表,并且可以在之后多次使用(所以也许从删除旧的数据透视表开始?) 2. 如何保持数据透视表的名称通用?我不知道下一个数据透视表在运行时会调用什么

任何帮助都会很棒!

下面是我的“宏”之一的代码,它应该创建和替换两个数据透视表。

   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

【问题讨论】:

  • 不,那没有用。我得到的第一个错误是关于第一行中的 Active.Workbook.Worksheets("Region") 。我有 5 个左右这样的宏,它们似乎都在不同的时间和不同的场合出错。数据中没有过滤器,我尝试在运行宏之前删除旧的数据透视表,所以我不会收到该错误。但我似乎仍然发现自己一团糟。

标签: vba excel pivot-table


【解决方案1】:

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

我怀疑数据透视表正在从某个范围内获取数据,并且当您刷新数据时,新数据的行数比旧数据多,因此数据透视表会丢失额外的行。

确保您透视表的最佳方法是基于一个范围,该范围具有足够的行来存储您放入工作表中的所有当前和未来数据。

检查数据透视表。

  1. 点击数据透视表

  2. 在功能区>数据透视表工具>分析>数据>更改数据源您可以看到范围是什么(并更改它)

请告诉我你的进展情况。

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

例如

  1. 选择包含您的数据的范围

  2. 单击功能区>插入>表格按钮将范围转换为 Excel 表格。

  3. 更改您的数据透视表以引用表中的数据

  4. 更改刷新数据的方式。

由于您是 excel 新手,我现在不会使用 Excel 表格,先让它工作,然后将其转换为使用它们。

我希望这会有所帮助。 哈维

【讨论】:

  • 附言。欢迎来到堆栈溢出。
  • 嗨哈维。谢谢您的答复!因此,在我对新数据进行测试之前,我只是不断地将旧数据复制到工作簿,使用宏来清理它,然后刷新所有枢轴。数据是一样的,没有添加更多内容。在使宏能够具有动态范围之前,我只喜欢生成表格的宏。基本上,宏需要从工作表中获取数据,将其放在新工作表上并进行修改,然后将该数据透视表复制到旧工作表以代替旧数据透视表。如果我说不通,请告诉我,因为我知道继续运行可能会令人困惑。
  • 为什么需要用宏来创建它们?我明白你在说什么,但这不是最好的方法。
  • 我想我不需要创建它们,但我担心将来会遇到新数据的麻烦。我宁愿每一个都创建一次,然后将它们全部放入一个宏中,该宏调用所有其他宏,然后得到我不理解的错误。
  • 相信我,你创建的代码是由宏记录生成的。要成为优秀的 VBA,需要大量的编辑和经验。代码将难以管理。最好的方法是利用上面描述的在没有 VBA 的情况下使用 excel 的优势。首先让它像那样工作,然后考虑学习和编写 VBA。
猜你喜欢
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
相关资源
最近更新 更多