我正在尝试创建数据透视表宏。为此,我有输入数据,我有一个录制的宏。但是,我收到错误,因为我想在代码的多个区域中使用它。
以下是一些示例数据:
我需要这样的输出:
Sub macro5()
'
' macro5 Macro
'
'
Range("A2:C16").Select
Range("C16").Activate
Sheets.Add
ActiveWorkbook.Worksheets("sheet2").PivotTables("PivotTable3").PivotCache. _
CreatePivotTable TableDestination:="Sheet6!R3C1", TableName:="PivotTable5" _
, DefaultVersion:=xlPivotTableVersion12
Sheets("Sheet6").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("PivotTable5").PivotFields("Item")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable5").PivotFields("Category")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable5").AddDataField ActiveSheet.PivotTables( _
"PivotTable5").PivotFields("Price"), "Sum of Price", xlSum
End Sub
我在突出显示的部分收到错误。
任何人都可以帮我找出原因吗?
答案 0 :(得分:1)
只有在Sheet2上已有来自同一数据集的现有数据透视表(称为数据透视表3)时,您的代码才有效。数据透视表共享一个PivotCache,如果存在,Excel将不会创建另一个,但重用现有的。这就是你的宏试图做的事情。
我建议您在文档中录制一个没有数据透视表的宏。这样,pivot-cache-creating-code将出现在录制的宏中。如果您需要多个数据透视表,则可以将上述宏用于下一个数据透视表,但请确保指向您的第一个数据透视表的缓存。
录制宏以插入数据透视表时必须考虑的事项:
请注意,宏录制器记录了一些固定名称(例如工作表名称,数据透视表名称,数据输入区域)。确保这些是正确的,如果没有,请使用变量或其他方式使它们动态化。
以下是创建新数据透视表的示例代码:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Sheet2!R1C1:R9C3", Version:=xlPivotTableVersion15).CreatePivotTable _
TableDestination:="Sheet3!R3C1", TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion15
请注意它与你的不同。
现在关于有问题的部分:
SourceData:="Sheet2!R1C1:R9C3"
如果您希望源数据是动态的,请更改此设置。例如。要使用当前选择,请使用:
SourceData:=Selection
另一个有趣的部分:
TableDestination:="Sheet3!R3C1"
如果您只使用空字符串(“”),它将始终将数据透视表插入新工作表(也将立即激活):
TableDestination:=""
数据透视表的名称不是问题,因为从Excel 2007及更高版本,您可以拥有多个具有相同名称的数据透视表,只要它们位于不同的工作表上即可。如果您想在同一工作表上使用更多数据透视表,则还必须考虑TableName属性。
好的,我可以在很多页面上继续讨论这个问题。我希望这有帮助!如果您有疑问,请询问。