Excel VBA获取选定数据透视表行的项目详细信息

好的,我一直在挖掘很多资源,但是我找不到任何有关如何实现这一目标的线索。 我挖掘了对象模型,但没有一个属性或方法看起来给我什么我需要的。

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

为了简化这个例子,我的支点有:

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

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

我希望用户在数据透视表中select一个项目(行),然后按我的button,让macros返回所选行的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?

谢谢你的帮助。

好吧,设法破解它。 find了另一个例子,展示了如何遍历这些项目并推断出这些项目。 它最初有点令人困惑,因为项目号码不是表格中的顺序,因此与所选行不相关。

修改为以前的答案:如果一个项目不可见(被活动filter隐藏),那么PivotItem.DataRange.Row会抛出一个错误。 现在使用错误testing来查看行是否可见:

  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, ie 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