2015-12-05 54 views
0

我想创建数据透视表宏。为此,我输入了数据,并在其上记录了一个宏。但是,由于我想在代码的多个区域使用它,因此出现错误。使用宏创建数据透视表 - 下标超出范围

下面是一些样本数据:

enter image description here

我需要的输出是这样的:

enter image description here

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

哪一部分突出?究竟是什么错误你好吗? –

+0

对不起它没有出现在这里...... activeWorkbook.Worksheets( “Sheet2的”)。数据透视表( “PivotTable3”)。PivotCache。 _ CreatePivotTable TableDestination:= “!Sheet6 R3C1”,表名:= “PivotTable5” _ ,DefaultVersion:= xlPivotTableVersion12 – vijaydamale102

回答

1

您的代码仅适用于已存在来自Sheet2上相同数据集的现有数据透视表,名为PivotTable3。数据透视表共享一个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属性。

好的,我可以继续讨论这个问题。我希望这有帮助!如果你有问题,请问。

+0

感谢您的帮助...查询解决:) – vijaydamale102