2015-08-21 115 views
0

我搜索了解决方案的董事会,但我无法找到任何类似的东西。VBA数据透视表彼此之间

我试图放置大约5个数据透视表,其中数据的行数不同。我能够在前两种情况下完成它,但代码在第三种情况下无法使用。

不幸的是,我被要求将它们垂直放置在表单上。以下是我的一段代码。对不起,我对VBA很陌生。我正在使用Excel 2007.

Sheets.ADD.Name = "Pivot" 

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    "CTB!" & Sheets("CTB").Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1), Version:=xlPivotTableVersion14).CreatePivotTable _ 
    TableDestination:="Pivot!R1C1", TableName:="PivotTable1", DefaultVersion _ 
    :=xlPivotTableVersion14 

Cells(1, 1).Select 
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Collector") 
    .Orientation = xlRowField 
    .Position = 1 
End With 
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable1").PivotFields("Transaction #"), "Count of Transaction #", xlCount 
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable1").PivotFields("Invoice Amount"), "Sum of Invoice Amount", xlSum 
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable1").PivotFields("Total Balance"), "Sum of Total Balance", xlSum 
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable1").PivotFields("Days Late"), "Sum of Days Late", xlSum 
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Sum of Days Late") 
    .Caption = "Average of Days Late" 
    .Function = xlAverage 
End With 

Dim pt As PivotTable 
Set pt = Sheets("Pivot").PivotTables("PivotTable1") 

Application.PivotTableSelection = True 
pt.PivotSelect ("Sum of Total Balance"), xlDataOnly 
Selection.Style = "Currency" 
pt.PivotSelect ("Sum of Invoice Amount"), xlDataOnly 
Selection.Style = "Currency" 
pt.PivotSelect ("Average of Days Late"), xlDataOnly 
Selection.NumberFormat = "0" 

Dim LastRow As Long 
LastRow = Sheets("Pivot").Cells(Sheets("Pivot").Rows.Count, "A").End(xlUp).Row 

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    "C121+!" & Sheets("C121+").Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1), Version:=xlPivotTableVersion14).CreatePivotTable _ 
    TableDestination:=Range("A" & LastRow + 2), TableName:="PivotTable2", DefaultVersion _ 
    :=xlPivotTableVersion14 

Dim pt2 As PivotTable 
Set pt2 = Sheets("Pivot").PivotTables("PivotTable2") 

pt2.TableRange1.Select 
With ActiveSheet.PivotTables("PivotTable2").PivotFields("Collector") 
    .Orientation = xlRowField 
    .Position = 1 
End With 
ActiveSheet.PivotTables("PivotTable2").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable2").PivotFields("Transaction #"), "Count of Transaction #", xlCount 
ActiveSheet.PivotTables("PivotTable2").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable2").PivotFields("Invoice Amount"), "Sum of Invoice Amount", xlSum 
ActiveSheet.PivotTables("PivotTable2").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable2").PivotFields("Total Balance"), "Sum of Total Balance", xlSum 
ActiveSheet.PivotTables("PivotTable2").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable2").PivotFields("Days Late"), "Sum of Days Late", xlSum 
With ActiveSheet.PivotTables("PivotTable2").PivotFields("Sum of Days Late") 
    .Caption = "Average of Days Late" 
    .Function = xlAverage 
End With 

Application.PivotTableSelection = True 
pt2.PivotSelect ("Sum of Total Balance"), xlDataOnly 
Selection.Style = "Currency" 
pt2.PivotSelect ("Sum of Invoice Amount"), xlDataOnly 
Selection.Style = "Currency" 
pt2.PivotSelect ("Average of Days Late"), xlDataOnly 
Selection.NumberFormat = "0" 

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    "11+!" & Sheets("11+").Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1), Version:=xlPivotTableVersion14).CreatePivotTable _ 
    TableDestination:=Range("A" & LastRow + 2), TableName:="PivotTable3", DefaultVersion _ 
    :=xlPivotTableVersion14 

Dim pt3 As PivotTable 
Set pt3 = Sheets("Pivot").PivotTables("PivotTable3") 

pt3.TableRange1.Select 
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Collector") 
    .Orientation = xlRowField 
    .Position = 1 
End With 
ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable3").PivotFields("Transaction #"), "Count of Transaction #", xlCount 
ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable3").PivotFields("Invoice Amount"), "Sum of Invoice Amount", xlSum 
ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable3").PivotFields("Total Balance"), "Sum of Total Balance", xlSum 
ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable3").PivotFields("Days Late"), "Sum of Days Late", xlSum 
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Sum of Days Late") 
    .Caption = "Average of Days Late" 
    .Function = xlAverage 
End With 

Application.PivotTableSelection = True 
pt3.PivotSelect ("Sum of Total Balance"), xlDataOnly 
Selection.Style = "Currency" 
pt3.PivotSelect ("Sum of Invoice Amount"), xlDataOnly 
Selection.Style = "Currency" 
pt3.PivotSelect ("Average of Days Late"), xlDataOnly 
Selection.NumberFormat = "0" 

任何意见将不胜感激!

+0

“代码是不是从第三工作”你得到一个错误?意想不到的结果?你期望什么?你有问题,或者只是在你的下午填写我们的信息? – Greg

+0

如果不清楚,我很抱歉。我得到“数据透视表报告不能重叠另一个数据透视表报告”。我希望它只是在第二个数据透视表下插入第三个数据透视表。 –

回答

1

它看起来像你必须更新你的LastRow变量每次你想插入一个新的pivotTable。然后将下一个pivotTable插入到最后一行下面的两行内的范围内...

在插入第二个pivotTable之前设置LastRow变量一次,但必须重置它才能读取当前的最后一行插入pivotTable3等,等等

+0

没想过,但也不管用。代码保持运行,应该将PivotTable3放置在某处,但我无法看到它,然后在尝试创建PivotTable4时代码失败。有任何想法吗? –

+0

只是想通了。我把它粘在了错误的地方。非常感谢! –