2017-02-22 303 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

相關問題