2017-04-25 3 views
1

Ich schreibe einen VBA-Code in Excel 2016, der benutzerdefiniertes Pivot-Tabellenlayout in csv speichern und dann wieder laden würde, wenn sie es brauchen.Excel VBA 2016 Liste ausgewählter Elemente eines Seitenfilters in einen Arbeitsblattbereich

Meine Pivot-Tabelle ist ein PowerPivot eins.

"Markt" Feld hat viele Länder zur Auswahl. Es befindet sich im Seitenfilterbereich und wird gefiltert, um Frankreich und Spanien anzuzeigen.

Was ich erreichen muss: In einem Arbeitsblatt die Elemente auflisten, die ausgewählt werden sollen.

Hier ist der Code (einer von vielen habe ich versucht):

Sub test_3() 

Set PT = ActiveSheet.PivotTables(1) 

For Each PF In PT.PivotFields 
    If PF.Orientation = xlPageField Then 
     Debug.Print PF.Name 
     For i = 1 To PF.PivotItems.Count 
      If PF.PivotItems(i).Visible = True Then Debug.Print PF.PivotItems(i).Name 
     Next i 
    End If 
Next PF 

End Sub 

OUTPUT I GET:

[Markets].[Market].[Market] 

, die nur ein Würfel Bezug auf den Feldnamen ist.

Scheint wie PivotItems nicht mit PageField funktioniert.

Alle Beispiele, die ich bisher gesehen habe, verwenden diese Eigenschaft, aber sie sind ziemlich alt und verwenden wahrscheinlich nicht PowerPivot-Tabellen.

Kann jemand helfen?

Vielen Dank im Voraus

+1

Können Sie bitte ändern Sie die Zeile Debug.Print PF.PivotItems (i) .Name zu Debug.Print PF.PivotItems (i) .Wert und sehen Sie das Ergebnis? –

+0

@ J.B. Ich habe es versucht, es hat nicht funktioniert. PF.PivotItems.Count scheint immer Null zu sein, also ist es nie zu dieser Zeile gekommen. Was ich versuchte, ich fest von FROM i = 1 bis 5, um in die Schleife zu bekommen, und dann eine Fehlermeldung "Konnte PivotItems-Eigenschaft der PivotField-Klasse auf der IF-Bedingung Teil nicht erhalten. Irgendwelche Ideen? –

Antwort

0

ich eine Lösung von Andrew Poulsom und einen anderen Kerl here

Grundsätzlich, vorbei an den sichtbaren Elemente in ein Array, und beziehen sich dann auf ihre Mitglieder in einer Schleife geschrieben gefunden:

Dim temparray as Variant 
.... some code setting your pivot field PF object reference 
temparray = PF.VisibleItemsList 
For i = LBound(temparray) To UBound(temparray) 
    activesheet.cells(i,1) = temparray(i) 
Next i 

dann die Filter mit diesem Bereich zu laden, gesammelt I die Zellen in eine Array-Bereich (in einem getrennten Verfahren, die Pivot-Tabellen geladen)

temparray = Application.Transpose(your_range_ref) 
PF.VisibleItemsList = Application.Transpose(temparray) 

Wenn jemand eine bessere Lösung hat, bitte teilen. Ich beantworte dies, damit es anderen helfen kann. Ich habe 3 Tage damit verschwendet.

Verwandte Themen