首页 文章

多个透视表的VBA脚本

提问于
浏览
0

我每周更换源数据,并附加许多数据透视表 . 但是,当我刷新表时,他们开始错过一些数据 . 所以,我继续记录了一些“宏”,每次创建和替换新的数据透视表 . 粘贴的区域将保持不变,我给他们足够的周围空间,永远不会重叠 . 不幸的是,我遇到了很多错误,根本不适合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

1 回答

  • 0

    您真的不需要重新创建数据透视表 . 您需要在刷新数据后找出数据透视表中数据丢失的原因 . 这样做的工作量很少 .

    我怀疑数据透视表是从一个范围获取数据,当您刷新数据时,新数据的行数比旧数据多,因此数据透视表会错过额外的行 .

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

    检查数据透视表 .

    • 点击数据透视表

    • in功能区>数据透视表工具>分析>数据>更改数据源,您可以查看范围(并更改)

    请告诉我你是怎么过的 .

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

    例如

    • 选择包含数据的范围

    • 单击功能区>“插入”>“表格”按钮,将范围转换为Excel表格 .

    • 将数据透视表更改为引用表中的数据

    • 更改刷新数据的方式 .

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

    我希望这有帮助 . 哈维

相关问题