excel - valor - Tabla de Pivote de Poder-Looping a través de los campos en los filtros de informe
tabla dinamica valores texto (3)
Después de algunas pruebas, parece que puede obtener la lista de campos de filtro de página al enumerar los Campos de gráfico y verificar si el valor de su propiedad de Orientación es igual a XlPageField. Pruebe el siguiente código:
Sub Test()
Dim pt as PivotTable
Dim pf as PivotFields
set pt=Sheets("test").PivotTables(1)
For each pf in pt.PivotFields
If pf.Orientation=xlPageField Then
Debug.Print pf.Name
End If
Next pf
End Sub
Espero que esto ayude
Descargo de responsabilidad : esta pregunta fue publicada en el foro msdn, pero como no recibí ninguna respuesta (sorprendentemente), también estoy publicando aquí. Es posible que desee comprobar ese enlace antes de intentar intentar esta pregunta. No quisiera que pierdas tu tiempo si se publica una solución en ese enlace :)
Problema : quiero averiguar los nombres de los campos en el filtro de informes. Así que estoy buscando RegionCountryName
, Cityname
y ProductKey
. Los filtros de informe son dinámicos y pueden cambiar.
Captura de pantalla :
Qué he intentado : he comprobado cada propiedad de Power Pivot, pero no hay ninguna propiedad que pueda encontrar que me permita recorrer los campos del pivote de potencia.
Incluso he intentado este código, pero aparentemente me da un error en Set pf = pt.PageFields(1)
Sub Sample()
Dim pt As PivotTable, pi As PivotItem, pf As PivotField
Dim lLoop As Long
Set pt = Sheet1.PivotTables(1)
Set pf = pt.PageFields(1)
For Each pi In pf.PivotItems
Debug.Print pi.Name
Next pi
End Sub
Error ScreenShot
Entonces, ¿qué me estoy perdiendo? ¿O hay un enfoque diferente que debería tomar?
EDITAR
Si alguien quiere experimentar con él, el archivo se puede descargar desde AQUÍ Estoy mirando la Hoja de Inventory
.
Han pasado más de 2 años desde que se planteó la pregunta original, pero aún no pude encontrar una respuesta satisfactoria ...
PERO encontré una forma de evitarlo :-) También puedes cambiar la tabla de PowerPivot mediante cortadoras.
Usé este código para cambiar el mes seleccionado en mi archivo:
Private Sub SpinButton21_SpinDown()
Dim SC As SlicerCache
Dim SL As SlicerCacheLevel
Dim SI As SlicerItem
Set SC = ActiveWorkbook.SlicerCaches("Slicer_Month4")
Set SL = SC.SlicerCacheLevels(1)
''get the current item number
c = 1
For Each SI In SL.SlicerItems
If SI.Selected = True Then
MONTHindex = c
Exit For
End If
c = c + 1
Next SI
If MONTHindex = 1 Then
MONTHindex = SC.SlicerCacheLevels.Item.Count + 1
End If
SC.VisibleSlicerItemsList = SL.SlicerItems(MONTHindex - 1).Name
End Sub
No soy un profesional, pero espero que ayude.
Si cambia pt.pivotfields a pt.pagefields en la publicación de realce_net, debería ejecutarse. Como dice la referencia de Microsoft, pagefields se introdujo con Office 2013.
Dim pt As PivotTable
Dim pf As PivotFields
Set pt = Sheets("test").PivotTables(1)
For Each pf In pt.PageFields
If pf.Orientation = xlPageField Then
Debug.Print pf.Name
End If
Next pf