2016-08-02 20 views
0

Warum entfernt die AddDataField() - Methode der Pivot-Tabelle das Feld aus "Report Filters"? Ich habe eine neue Pivot-Tabelle mit GUI erstellt und ein Makro aufgezeichnet. Alles ging gut, außer dass das Makro selbst nicht funktioniert. Wie kann ich ein Feld zu "Report Filters" und Werten mit VBA hinzufügen (kann ich nur mit GUI tun)?AddDataField entfernt das Feld "Report Filter"

Hier ist das Makro, das ich aufgenommen habe. Sie können dies auf einem leeren Blatt mit aktivem A1 testen. Der letzte Befehl entfernt das Feld von "Berichtsfiltern", obwohl alles gut funktionierte, während das Makro aufgezeichnet und die GUI verwendet wurde. Das schlägt mich wirklich.

Option Explicit 

Sub Macro8() 
' 
' Macro8 Macro 
' 

' 
    ActiveCell.FormulaR1C1 = "foo" 
    Range("A2").Select 
    ActiveCell.FormulaR1C1 = "1" 
    Range("A3").Select 
    Selection.End(xlUp).Select 
    Range(Selection, Selection.End(xlUp)).Select 
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     "Sheet1!R1C1:R2C1", Version:=xlPivotTableVersion14).CreatePivotTable _ 
     TableDestination:="Sheet1!R1C3", TableName:="PivotTable2", DefaultVersion _ 
     :=xlPivotTableVersion14 
    Sheets("Sheet1").Select 
    Cells(1, 3).Select 
    With ActiveSheet.PivotTables("PivotTable2").PivotFields("foo") 
     .Orientation = xlPageField 
     .Position = 1 
    End With 
    ActiveSheet.PivotTables("PivotTable2").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable2").PivotFields("foo"), "Sum of foo", xlSum 
End Sub 
+0

Hinzufügen von Daten alle zuvor hinzugefügten Felder abstreift und ersetzt sie diejenigen mit in Ihre '.AddDataField' Methode aufgelistet . Sie müssen alle gewünschten Datenfelder in Ihrer 'AddDataField'-Methode auflisten. – Kyle

Antwort

0

EDIT:

ich mich geirrt. Öffnen Sie eine neue Arbeitsmappe, in Sheet2 in Zelle A1 geben Sie "Bezeichnung" und in B1 Typ "Wert" ein. Ich füllte dann die ersten 50 Zeilen der Spalte A mit "a", "b" oder "c", zusammen meine Etiketten. Neben den Etiketten habe ich eine RandBetween(1,50) gemacht. Der folgende Code wird eine PivotTable in Zelle A1 von Sheet1 ausgeben. Ich schlage vor, damit zu spielen, um ein Gefühl dafür zu bekommen, wie das Hinzufügen verschiedener Felder funktioniert.

Option Explicit 

Sub pt() 
Dim pc As PivotCache 
Dim pt As PivotTable 
Dim wb As Workbook 

Set wb = ThisWorkbook 

With wb 
    Set pc = .PivotCaches.Create(xlDatabase,  .Sheets("Sheet2").Range("a2").CurrentRegion) 
End With 

With pc 
    Set pt = .CreatePivotTable(ThisWorkbook.Sheets("Sheet1").Range("a1")) 
End With 

With pt 
    .AddDataField .PivotFields("label") 
    .AddDataField .PivotFields("value"),,xlSum 
    .AddFields RowFields:="label", PageFields:="value" 
End With 


End Sub 
+0

Du hast mich hier verloren. Könnten Sie mir bitte ein funktionierendes Beispiel für die Verwendung von AddDataField() geben, um dasselbe Feld zu "Report filters" und "Values" (Summenfunktion) hinzuzufügen? – jumxozizi

+0

Siehe das Update mit Beispiel. – Kyle

+0

Eine Lösung scheint zu sein, das Feld zuerst zu "Values" hinzuzufügen und erst dann zu "Report Filter" hinzuzufügen. Ich verstehe einfach nicht, warum das Hinzufügen des Feldes zu "Report Filter" es von "Values" entfernt. Wenn ich GUI benutze, kann ich es in jeder Reihenfolge machen, aber in VBA muss ich es in einer bestimmten Reihenfolge tun, damit es funktioniert ... – jumxozizi

0

Ich verstehe nicht, warum AddDataField() das Feld von "Report Filter" entfernt, aber paar Abhilfen hier gefunden:

  1. die GUI verwenden Sie das Feld
  2. hinzufügen Fügen Sie das Feld auf "Werte" erste und nur dann "Filter Report":

    ActiveSheet.PivotTables("PivotTable2").AddDataField ActiveSheet.PivotTables(_ 
        "PivotTable2").PivotFields("foo"), "Sum of foo", xlSum 
    With ActiveSheet.PivotTables("PivotTable2").PivotFields("foo") 
        .Orientation = xlPageField 
        .Position = 1 
    End With 
    
  3. Verwenden Sie diese Subdatei, die das Feld "Report Filter" ausliest, nachdem es von AddDataField() entfernt wurde.

    Sub addDataField(table As Variant, field As Variant, name As Variant, fieldFunction As Variant) 
        Dim orientation As Variant 
        orientation = field.orientation 
        table.addDataField field, name, fieldFunction 
        field.orientation = orientation 
    End Sub 
    

    So der letzte Befehl des Beispiels sollte in geändert werden:

    Felder
    'ActiveSheet.PivotTables("PivotTable2").addDataField ActiveSheet.PivotTables(_ 
    ' "PivotTable2").PivotFields("foo"), "Sum of foo", xlSum 
    addDataField ActiveSheet.PivotTables("PivotTable2"), ActiveSheet.PivotTables("PivotTable2").PivotFields("foo"), "Sum of foo", xlSum