2012-06-04 7 views
2

Есть ли способ захватить событие Pivot Double Click? (Событие, которое генерирует подробный вид на другом листе.)Pivot Double Click - Show Detail event

Есть ли какой-либо способ, который я могу увидеть весь источник данных выбранного стержня в качестве данных?

Я использую программирование на 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 

EDIT: «Я ищу после двойного щелчка события, как мне нужно, чтобы захватить диапазон значений на новом листе.»

Попробуйте это. Поместите его в модуль 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

Я считаю, что вы заинтересованы в ShowDetail имущества Range объекта.

Чтобы получить весь набор данных, вы можете установить это свойство для DataBodyRange сводной таблицы.

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

Редактировать: За комментарий, если вы хотите, чтобы набор данных, который отображает таблицу поворота, вы должны были бы написать метод, который использует PivotCache для определения SourceType и получить данные в обратном порядке в зависимости от типа SourceType. Не существует свойства PivotTable или PivotCache, которое возвращает ADODB.RecordSet независимо от SourceType, а тем более .NET DataTable.

+0

Право. Меня интересует полный набор данных, но установка свойства true не даст мне набор данных в объекте. Я хочу захватить набор данных без каких-либо воздействий на книгу/рабочий лист. – Cannon