Можно ли определить положение PivotField по выбору? - PullRequest
0 голосов
/ 06 июня 2018

Если я выберу одно из сводных полей в следующей сводной таблице, есть ли способ определить его положение?Например, выбрав Yc и выведя позицию, будет 2.

Xa
---- Yb
---- Yc
-------- Za
-------- Zb
-------- Zc
Xb
---- Yd
-------- Ze
-------- Z5

1 Ответ

0 голосов
/ 07 июня 2018

Ключ должен убедиться, что вы находитесь в правильном диапазоне.Просмотрите превосходную страницу Джона Пельтье по диапазонам сводных таблиц .В вашем случае вы хотите ограничить свой выбор ячейки RowFields.Путь к выяснению, из какой позиции следует отступить, с какого Item, в каком Field ...

Option Explicit

Sub WhatPosition()
    Dim pt As PivotTable
    Set pt = ActiveSheet.PivotTables(1)

    Debug.Print "current cell selection is " & Selection.Address & _
                " = '" & Selection.value & "'"

    '--- is the selection within the row label range of the pivot table?
    If Not Intersect(Selection, pt.RowRange) Is Nothing Then
        Debug.Print "selection position = " & StringToPivotFieldPosition(pt, Selection.value)
    Else
        Debug.Print "the selection is not within the pivot table"
    End If
End Sub

Private Function StringToPivotFieldPosition(ByRef pTable As PivotTable, _
                                            ByVal value As String) As Long
    Dim field As PivotField
    StringToPivotFieldPosition = 0
    For Each field In pTable.RowFields
        Dim item As PivotItem
        For Each item In field.PivotItems
            If item.Name = value Then
                StringToPivotFieldPosition = field.position
                Exit Function
            End If
        Next item
    Next field
End Function
...