2017-02-22 29 views
3

好的,我一直在挖掘大量资源,但我无法找到任何有关如何实现这一目标的线索。我已经挖掘了对象模型,但没有一个属性或方法显示给我我需要的东西。Excel VBA获取选定数据透视表行的项目详细信息

我想获取所选行的行数据。我不想将数据提取到新工作表上,我只想获取活动行的行标签。然后,我将这些行数据放入一张表格中,以比提取的方法更好的格式显示详细信息。

为了简化的例子中,我的枢轴具有:

  • 行标签:Case_Name,Case_Ref(1:1的关系)
  • 列标签:状态
  • 值:呼叫的计数

理想情况下,我希望在Pivot中隐藏Case_Ref,但它是我需要为下一步提取的关键。

我希望用户在数据透视表中选择一个项目(行),然后按我的按钮并让宏返回所选行的Case_Ref。

我的(失败)到目前为止的代码看起来是这样的:

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

相关问题