2012-06-04 59 views
2

有什麼方法可以捕獲樞軸雙擊事件? (在另一張紙上生成詳細視圖的事件)樞軸雙擊 - 顯示詳細事件

有沒有什麼方法可以將選定透視圖的整個數據源看作數據表?

我正在使用C#,VSTO編程。

回答

1

以下是vba中的操作方法。將這個代碼工作表的代碼模塊中:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
Dim pt As Excel.PivotTable 

On Error Resume Next 
Set pt = Target.PivotTable 
If Err.Number = 0 Then 
    MsgBox "captured" 
    'to cancel uncomment next line 
    'Cancel = True 
End If 
End Sub 

編輯:「我正在尋找雙擊事件後,我需要捕捉新的表值的範圍。」

然後試試這個。把它放在ThisWorkbook模塊中。它使用模塊級別的變量來跟蹤數據透視是否被雙擊並在NewSheet事件中進行檢查。

Private PivotDoubleClicked As Boolean 

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
Dim pt As Excel.PivotTable 
On Error Resume Next 
Set pt = Target.PivotTable 
If Err.Number = 0 Then 
    PivotDoubleClicked = True 
End If 
End Sub 

Private Sub Workbook_NewSheet(ByVal Sh As Object) 
If PivotDoubleClicked Then 
    MsgBox "new sheet from pivot double-click" 
    PivotDoubleClicked = False 
End If 
End Sub 
+0

我正在尋找雙擊事件後,因爲我需要捕獲新工作表上的值的範圍,或者最好,如果我可以從透視對象獲取整個數據源作爲數據表。 – Cannon

+0

是的。但上面的解決方案將使我有兩個表級事件。無論何時雙擊表單或添加新工作表時,事件都會在那裏,無論是雙擊還是雙擊。如果可能的話,我想避免宣佈這些事件。 – Cannon

+1

你對這兩件事有什麼擔憂?我已經制定了針對這些類型情況的標準方法。您可以在檢查工作表之前檢查其是否爲透視單元格,以縮小它的範圍。在得到答案後很容易說「是,但是」,但在列出它們之前並不容易猜測您的要求。 :) –

0

我相信你感興趣的Range對象的ShowDetail屬性。

要獲取整個數據集,可以爲數據透視表的DataBodyRange設置此屬性。

Excel.PivotTable pivotTable = (Excel.PivotTable)Globals.Sheet3.PivotTables(1); 
pivotTable.DataBodyRange.ShowDetail = true; 

編輯:每評論,如果你想要的數據透視表呈現的數據集,你必須編寫使用PivotCache確定SourceType的方法和獲取數據取決於SourceType的類型。沒有PivotTablePivotCache的屬性,無論SourceType如何,都返回ADODB.RecordSet,更不用說.NET DataTable

+0

對。我對整個數據集感興趣,但將屬性設置爲true將不會將數據集提供給對象。我想要捕獲數據集,而對工作簿/工作表沒有任何影響。 – Cannon