Excel VBA или VSTO. Как выполнить цикл по полям в сводной таблице? - PullRequest
2 голосов
/ 04 декабря 2008

Вот пример кода VBA:

Sub Macro1()
    Dim pt As PivotTable
    Set pt = ActiveSheet.PivotTables("SomePivotTable")
    'Set colOfFields = pt.PivotFields  
End Sub

Третья строка не завершена / разорвана. Как правильно получить доступ к коллекции всех полей в сводной таблице? Я должен быть в состоянии зациклить их. Фактическое кодирование выполняется в проекте C # VSTO.

Ответы [ 2 ]

3 голосов
/ 04 декабря 2008

Это работает для меня (Excel 2003 [11.8146.8202] SP2):

Sub Macro1()
    Dim pt As PivotTable
    Dim col As PivotFields
    Dim c As PivotField

    ' Name of the pivot table comes from right clicking on the pivot table,
    ' Table Options..., Name field.
    Set pt = ActiveSheet.PivotTables("PivotTable1")
    Set col = pt.PivotFields
    For Each c In col
        Debug.Print c.Name
    Next
End Sub
1 голос
/ 04 декабря 2008

Хорошо. Найдены некоторые идеи кода на C #:
http://blogs.msdn.com/andreww/archive/2008/07/25/creating-a-pivottable-programmatically.aspx

// pvtTable is an Excel.PivotTable set earlier in the code
Excel.PivotFields pflds =     
    (Excel.PivotFields)pvtTable.PivotFields(System.Type.Missing);
    foreach (Excel.PivotField pf in pflds)
    {
      //some code here
    }

Трюк передается в System.Type.Missing, чтобы вернуть «коллекцию» полей.

...