创建数据透视表不适用于新的Excel版本

时间:2019-04-01 07:20:02

标签: excel vba pivot-table

我的宏应该创建数据透视表并添加特定的过滤器。 我为此使用了宏记录器,它可以在我的计算机上运行,​​但不能在较新版本的excel上运行。这是我的代码:

Cells.Select
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "1!R1C1:R1048576C13", Version:=xlPivotTableVersion14).CreatePivotTable _
    TableDestination:="Tabelle2!R3C1", TableName:="PivotTable2", _
    DefaultVersion:=xlPivotTableVersion14
Sheets("Tabelle2").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("PivotTable2").PivotFields("PlatzID/Gerät")
    .Orientation = xlRowField
    .Position = 1
End With
ActiveSheet.PivotTables("PivotTable2").AddDataField ActiveSheet.PivotTables( _
    "PivotTable2").PivotFields("Tagabfluss"), "Anzahl von Tagabfluss", xlCount
With ActiveSheet.PivotTables("PivotTable2").PivotFields("Anzahl von Tagabfluss" _
    )
    .Caption = "Summe von Tagabfluss"
    .Function = xlSum
End With

我尝试将Version:=xlPivotTableVersion14更改为Version:=xlPivotTableVersion15以及其他适用于其他excel版本的数字,但似乎无济于事。

我正在使用Excel 2010,而我的同事正在使用Excel 2013。 调试功能突出显示:

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "1!R1C1:R1048576C13", Version:=xlPivotTableVersion14).CreatePivotTable _
    TableDestination:="Tabelle2!R3C1", TableName:="PivotTable2", _
    DefaultVersion:=xlPivotTableVersion14

1 个答案:

答案 0 :(得分:0)

首先,您真的不应该将整列用作数据透视表的源数据。其次,将代码分解为离散的部分将有助于您缩小错误是创建数据透视表缓存还是数据透视表本身。我建议使用:

Dim pivotSheet As Worksheet
Set pivotSheet = Sheets.Add
With Sheets("1")
    Dim pc As PivotCache
    Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                SourceData:="'" & .Name & "'!" & .Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1), _
                Version:=xlPivotTableVersion14)
End With

Dim pt As PivotTable
Set pt = pc.CreatePivotTable(TableDestination:=pivotSheet.Cells(3, 1), DefaultVersion:=xlPivotTableVersion14)

With pt
    With .PivotFields("PlatzID/Gerät")
        .Orientation = xlRowField
        .Position = 1
    End With
    .AddDataField .PivotFields("Tagabfluss"), "Summe von Tagabfluss", xlSum
End With