2013-09-13 3 views
9

Отказ от ответственности: Этот вопрос был отправлен в msdn forum, но так как я не получил никакого ответа (на удивление), я также перекрестно размещаю его здесь. Возможно, вам захочется проверить эту ссылку, прежде чем пытаться попробовать этот вопрос. Я бы не хотел, чтобы вы тратили свое время, если решение было отправлено по этой ссылке :)Power Pivot Table - Looping through Fields in Report Filters

Задача: Я хочу узнать имена полей в Фильтре отчетов. Поэтому я ищу RegionCountryName, Cityname и ProductKey. Фильтры отчетов являются динамическими и могут меняться.

Скриншот:

enter image description here

Что я пытался: Я проверил все свойства мощности Pivot, но нет никакой собственности, что я мог бы найти, который позволил бы мне петлю через поле от силового стержня.

Я даже попробовал этот код, но он, видимо, дают мне ошибку на 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 

ScreenShot Ошибка

enter image description here

Так что мне не хватает? Или есть другой подход, который я должен предпринять?

EDIT

Если кто-то хочет, чтобы экспериментировать с ним, файл можно загрузить с HERE Я смотрю на Inventory листе.

+0

Просто быстро трещины на это, но почему это 'PivotField.PivotFilters' свойство не работает здесь? –

+0

Спасибо за то, что вы сделали это. 'pf.PivotFilters.Count' дать мне 0 :) –

ответ

3

После некоторого тестирования кажется, что вы можете получить список полей фильтра страницы, указав PivotFields и проверив, соответствует ли значение их свойства Orientation XlPageField. Попробуйте код ниже:

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 

Надеется, что это помогает прошло

+0

Спасибо за ваш ответ, но это не обычный Pivot. Это Power Pivot. Строка «Для каждого pf в pt.PivotFields» дает мне «Ошибка времени выполнения 13, несоответствие типа». Если вы хотите поэкспериментировать с ним, вы можете загрузить его из [здесь] (http://www.microsoft.com/en-gb/download/details.aspx?id=11597) –

+0

Жаль, что это не помогло, из чего Я могу читать здесь и там, powerpivots, похоже, используют CubeFields, но я не могу его протестировать. Ты это пробовал ? –

+0

Я думаю, вы забыли упомянуть ссылки –

0

Более 2-х лет, так как первоначальный вопрос был поднят, но я до сих пор не удался найти удовлетворительный ответ ...

НО Я нашел способ :-) Вы также можете изменить таблицу PowerPivot через slicers.

Я использовал этот код, чтобы изменить выбранный месяц в моем файле:

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 

Я не профессионал, но я надеюсь, что это помогает.

1

Если вы измените pt.pivotfields на pt.pagefields в столбце realce_net, он должен работать. Как ссылка Microsoft говорит, pagefields была введена с офисом 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