2017-02-22 18 views
3

ОК, я прорыл много ресурсов, но я не могу найти никаких подсказок о том, как этого добиться. Я прорыл объектную модель, но ни одно из свойств или методов не дает мне то, что мне нужно.Excel VBA, чтобы получить детальную информацию о выбранной строке сводной таблицы

Я хочу получить данные строки из выбранной строки. Я не хочу извлекать данные на новый лист, я просто хочу получить ярлык строки активной строки. Затем я помещал данные этой строки в лист, который отображает детали в лучшем формате, чем только извлеченный метод.

Чтобы упростить пример, мой стержень имеет:

  • меток строк: Case_Name, Case_Ref (отношение 1: 1)
  • Колонка Этикетки: Статус
  • Значения: Число вызовов

В идеале, я бы хотел, чтобы Case_Ref был скрыт от просмотра в Pivot, но это ключ, который мне нужно извлечь для следующего шага.

Я хочу, чтобы пользователь выделил один элемент (строку) в своде, затем нажмите мою кнопку и верните макрос Case_Ref из выбранной строки.

My (неудачно) код до сих пор выглядит следующим образом:

Sub Pivot_Detail_By_Case__Customer_Contacts_By_Case() 
    'CCBC = Customer Contacts By Case 
    Set CCBC_PivotTable = Worksheets("Customer contacts by case").PivotTables(1) 
    HeaderRow = CCBC_PivotTable.RowRange.Row 
    RowCount = CCBC_PivotTable.RowRange.Count 

    'Confirm limits of row range 
    'Range(Cells(HeaderRow + 1, 1), Cells(HeaderRow + RowCount - 2, 1)).Select 

    PivotDataStartRow = HeaderRow + 1 
    PivotDataEndRow = HeaderRow + RowCount - 2 

    If ActiveCell.Row >= PivotDataStartRow And ActiveCell.Row <= PivotDataEndRow Then 
     ItemNumber = ActiveCell.Row - PivotDataStartRow 
     'SelectedField = CCBC_PivotTable.DataPivotField.PivotItems(ItemNumer) 
     'pvt_InnerDetail = CCBC_PivotTable.InnerDetail 
     'SelectedField = CCBC_PivotTable.RowFields("Case_Ref") 
    End If 

End Sub 

ItemNumber, кажется, работает, но как я могу получить Case_Ref оттуда?

Благодарим за помощь.

+0

Я не буду добавлять в качестве ответа, поскольку это ссылка на внешний сайт. В нем описывается, как ссылаться на разные части сводной таблицы: http://peltiertech.com/referencing-pivot-table-ranges-in-vba/ –

ответ

0

Хорошо, удалось взломать его. Нашел еще один пример, показывающий, как перебирать элементы и экстраполировать их. Первоначально это было немного запутанно, потому что номер позиции не является порядком в таблице, поэтому не коррелировал с выбранной строкой.

Редакция к предыдущему ответу: Если элемент не был виден (скрыт активным фильтром), тогда PivotItem.DataRange.Row забросил ошибку. Теперь используйте проверку ошибок, чтобы увидеть, видна ли строка:

Sub Pivot_Detail_By_Case__Customer_Contacts_By_Case() 
    'CCBC = Customer Contacts By Case 
    Set CCBC_PivotTable = Worksheets("Customer contacts by case").PivotTables(1) 
    HeaderRow = CCBC_PivotTable.RowRange.Row 
    RowCount = CCBC_PivotTable.RowRange.Count 

    'Confirm limits of row range 
    'Range(Cells(HeaderRow + 1, 1), Cells(HeaderRow + RowCount - 2, 1)).Select 

    PivotDataStartRow = HeaderRow + 1 
    PivotDataEndRow = HeaderRow + RowCount - 2 


    If ActiveCell.Row >= PivotDataStartRow And ActiveCell.Row <= PivotDataEndRow Then 
     For Each PivotItem In CCBC_PivotTable.PivotFields("Case_Ref").PivotItems 
      'Debug.Print PivotItem.DataRange.Row 
      'PivotItem.DataRange.Row throws an error if the item is hidden by the active filter 
      Err.Number = 0 
      'Debug.Print Err.Number 
      TestIfVisible = PivotItem.DataRange.Row 
      'Debug.Print Err.Number 
      If Err.Number = 0 Then 'Last line didn't cause an error, i.e. item is visible 
       If PivotItem.DataRange.Row = ActiveCell.Row Then 
        SelectedCallRef = PivotItem.Value 
        GoTo RowFound 
       End If 
      End If 
     Next 
RowFound: 
    End If 

    MsgBox SelectedCaseRef 

End Sub 
+0

Все еще ищут больше идей по этому поводу - если у меня есть Case_Ref, показанный на шагах , это делает ярлыки диаграмм очень уродливыми. Если он скрыт, этот макрос не работает. – Scott

Смежные вопросы