2017-09-29 9 views
3

Ich habe verschiedene Pivot-Tabellen, sondern nur in anderen Arbeitsblättern (Einfügen neuer) aus Daten erstellt. Jetzt habe ich die Daten in der gleichen Excel-Tabelle, die ich die Pivot-Tabelle erstellen möchte. Es bleibt erdrückend und sagt, es habe ein Problem in der Zeile, in der ich den PCache eingestellt habe. Ich reiche den Code untenPivot-Tabelle auf dem gleichen Arbeitsblatt mit den Daten

Sub a() 

Dim PSheet As Worksheet 
Dim DSheet As Worksheet 
Dim PCache As PivotCache 
Dim PTable As PivotTable 
Dim PRange As Range 
Dim LastRow As Long 
Dim LastCol As Long 

Set PSheet = ActiveSheet 

LastRow = PSheet.Cells(Rows.Count, 1).End(xlUp).Row 
LastCol = PSheet.Cells(1, Columns.Count).End(xlToLeft).Column 
Set PRange = PSheet.Cells(1, 1).Resize(LastRow, LastCol) 

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange).CreatePivotTable TableDestination:=PSheet.Cells(2, 13), TableName:="PivotTable1" 

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Destination") 
    .Orientation = xlRowField 
    .Position = 1 
    .Subtotals(1) = True 
    .Subtotals(1) = False 
End With 

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Total trucks") 
    .Orientation = xlDataField 
    .Position = 1 
    .Function = xlSum 
    .Name = "Sum of Quantity (cases/sw)" 
End With 

'PTable.LayoutRowDefault = xlTabularRow 
'Range("M2").Value = "Commodity Code" 

End Sub 

Antwort

2

Bitte ersetzen Sie diese Zeilen:

Set PCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=PRange).CreatePivotTable(TableDestination:=PSheet.Cells(2, 13), TableName:="PivotTable") 

Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(1, 1), TableName:="PivotTable") 

mit:

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange).CreatePivotTable TableDestination:= _ 
PSheet.Cells(2, 13), TableName:="PivotTable1" 

und benennen TableName zu PivotTable1

+0

Ich habe es einfach gemacht und leider immer noch ein Problem im selben Teil! Ich habe den aktualisierten Code hochgeladen, wie es nach der Änderung ist! –

+0

Es tut mir leid !!! Es hat tatsächlich funktioniert !!! –

+0

Das einzige Problem ist, dass, selbst wenn es stark läuft, es am Ende sagt "Kann die Name-Eigenschaft der PivotField-Klasse ... keine Idee warum? –

0

Lesen Sie den Code unten und Erklärung innen die Kommentare des Codes:

Option Explicit 

Sub a() 

Dim PSheet As Worksheet 
Dim DSheet As Worksheet 
Dim PCache As PivotCache 
Dim PTable As PivotTable 
Dim PRange As Range 
Dim LastRow As Long 
Dim LastCol As Long 

Set PSheet = ActiveSheet 

With PSheet 
    LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
    LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    Set PRange = .Cells(1, 1).Resize(LastRow, LastCol) 
End With 

' first: set the Pivot Cache object 
Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange.Address(False, False, xlA1, xlExternal)) 

' Second: set the Pivot Table object 
Set PTable = PSheet.PivotTables.Add(PivotCache:=PCache, TableDestination:=PSheet.Cells(2, 13), TableName:="PivotTable1") 

' after we set the Pivot-Table object, use the object to modify it's properties 
With PTable 
    With .PivotFields("Destination") 
     .Orientation = xlRowField 
     .Position = 1 
     .Subtotals(1) = True 
     .Subtotals(1) = False 
    End With 

    With .PivotFields("Total trucks") 
     .Orientation = xlDataField 
     .Position = 1 
     .Function = xlSum 
     .Name = "Sum of Quantity (cases/sw)" 
    End With 
End With 

'PTable.LayoutRowDefault = xlTabularRow 
'Range("M2").Value = "Commodity Code" 

End Sub 
Verwandte Themen