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。
单击枢轴 table
in ribbon>Pivot table tools>analyse>data>Change data source 你可以看到范围是什么(并改变它)
请告诉我你的进展情况。
将来您可能会考虑使用 excel tables(也称为 ListObjects)
例如
select 包含您的数据的范围
单击功能区>插入>Table 按钮将范围转换为 excel table。
将数据透视表 tables 更改为 tables
中的参考数据
更改刷新数据的方式。
由于您是 excel 的新手,我现在不会使用 Excel 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。
单击枢轴 table
in ribbon>Pivot table tools>analyse>data>Change data source 你可以看到范围是什么(并改变它)
请告诉我你的进展情况。
将来您可能会考虑使用 excel tables(也称为 ListObjects)
例如
select 包含您的数据的范围
单击功能区>插入>Table 按钮将范围转换为 excel table。
将数据透视表 tables 更改为 tables
中的参考数据
更改刷新数据的方式。
由于您是 excel 的新手,我现在不会使用 Excel tables,先让它工作,然后再转换以使用它们。
希望对您有所帮助。 哈维