好的,我一直在挖掘大量资源,但我找不到任何关于如何实现这一目标的线索。我已经挖掘了对象模型,但没有任何属性或方法能够满足我的需要。
我想获取所选行的行数据。我不想将数据提取到新工作表中,我只想获取活动行的行标签。然后我将该行数据放入一个表单中,该表单以比提取的方法更好的格式显示详细信息。
为了简化示例,我的支点有:
理想情况下,我想在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 :(得分: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