2017-12-20 1 views
0

Ich möchte die Pivot-Tabelle automatisch in ein neues Blatt einfügen. Wenn ich das ausführe, fügt es nur ein neues Blatt mit dem Name der Pivot-Tabelle ein, jedoch erstellt es den Pivot-Cache nicht und es liest die Daten aus Quellblatt nicht. Der Blattname ist Data und Pivot sollte von diesem erstellt werden.Fügt nur ein neues Blatt anstelle einer Pivot-Tabelle in ein neues Blatt ein

Sub InsertPivotTable() 

    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 

    On Error Resume Next 
    Application.DisplayAlerts = False 
    Worksheets("PivotTable").Delete 
    Sheets.Add Before:=ActiveSheet 
    ActiveSheet.Name = "PivotTable" 
    Application.DisplayAlerts = True 

    Set PSheet = Worksheets("PivotTable") 
    Set DSheet = Worksheets("Data") 

    LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row 
    LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column 

    Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol) 

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

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

    With ActiveSheet.PivotTables("PivotTable").PivotFields("Last_Touch_User_Name") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 

    With ActiveSheet.PivotTables("PivotTable").PivotFields("Action_Code") 
     .Orientation = xlColumnField 
     .Position = 1 
    End With 

    With ActiveSheet.PivotTables("PivotTable").PivotFields("Result_Code") 
     .Orientation = xlColumnField 
     .Position = 2 
    End With 

    With ActiveSheet.PivotTables("PivotTable").PivotFields("Medical_Manager__") 
     .Orientation = xlDataField 
     .Position = 1 
     .Function = xlCount 
    End With 

End Sub 
+0

Bitte bearbeiten Sie Beiträge verfassen. Kopieren und fügen Sie den Code direkt von Ihrem VBE ein und formatieren Sie ihn als Code, nicht als Blockquote. Ich habe versucht, es aufzuräumen, aber ich möchte die Zeit nicht verbringen. – teylyn

+0

Ich werde Sekunde @teylyn. Ich habe das meiste getan, aber sorge dafür, dass du deinen Code das nächste Mal aufräumst. Es ist leicht. In VBE (wo du deinen Code schreibst, markierst du ihn und drückst 'Tab'. Dann kopiere ihn hier. Er formatiert deinen Code automatisch nach Bedarf. – L42

Antwort

0

Sie sehen aus wie Sie versucht haben, zu kombinieren oder teilweise Schritte hier trennen:

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

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

Wenn Sie in der Tat (wie pro Ihre Variablen) wollen zwei haben vollständig getrennte Schritte für die Schaffung von der Cache und dann die Pivot-Tabelle:

Set PCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, SourceData:=PRange) 

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

und achten Sie auf On Error Resume Next, die nicht mit einem On Error Goto O geschlossen wird, was wahrscheinlich der Grund dafür ist, yo Du hast das nicht bemerkt.

immer Option Explicit an der Spitze des Moduls hinzufügen für Variablendeklarationen zu überprüfen, Schreibweisen usw.

Verwandte Themen