2016-11-25 5 views
0

Моя книга состоит из двух листов: Sheet1 является основной информационной панелью, которую видит пользователь, в то время как Sheet2 состоит из сводной таблицы и обычной таблицы.Таблица фильтров на основе щелкнутого текста ячейки

Я хотел бы реализовать некоторый код VBA, чтобы пользователь мог нажать на какой-либо текст в Листе 1, а сводная таблица на Sheet2 будет фильтроваться в соответствии с тем, на какой текст щелкнул пользователь.

Так, например, колонка A на Sheet1 представляет собой список городов США. Я хотел бы, чтобы пользователь мог дважды щелкнуть по названию города в Sheet1 и иметь сводную таблицу на фильтре Sheet2, независимо от названия города.

Мне не нужен макрос, чтобы на самом деле привести пользователя к Sheet2. Все, что я планирую сделать, это просто ссылка на сводную таблицу на Sheet1.

Я разработал нечто подобное, используя стандартную таблицу, но мне действительно нужно, чтобы это работало на сводной таблице, и я не уверен, как это сделать.


UPDATE

Ok так вот мой код прямо сейчас:

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    If Not Intersect(Target, Range("E:P")) Is Nothing Then 
    Application.ScreenUpdating = False 
    Worksheets("Dillon Pivot").PivotTables("PivotTable2").ManualUpdate = True 
    Worksheets("Dillon Pivot").PivotTables("PivotTable2").PivotFields("Match").ClearAllFilters 
    Worksheets("Dillon Pivot").PivotTables("PivotTable2").PivotFields("Match").CurrentPage = ActiveCell.Value 
    Worksheets("Dillon Pivot").PivotTables("PivotTable2").ManualUpdate = False 
    Application.ScreenUpdating = True 
    End If 
End Sub 

Я хочу, чтобы пользователь мог щелкнуть ячейку на главной панели управления и иметь сводную таблицу на «Dillon Pivot» будет отфильтровано.

Однако, когда я дважды щелкните ячейку, я получаю следующее сообщение об ошибке: «приложения или объекта определяется ошибка»

Может кто-нибудь помочь?

+0

Взгляните на следующее - он описывает, как заменить фильтр: http://stackoverflow.com/questions/11071662/filter-excel-pivot-table-using- vba Тогда вам просто нужен код для обработки вашего двойного щелчка, который можно найти здесь: http://www.excel-easy.com/vba/examples/beforedoubleclick-event.html Нужна дополнительная помощь, пусть мы знаем. –

+0

Хорошо, я добавил обновление! – Darren

+0

Почему бы не использовать [Slicers] (https://support.office.com/en-us/article/Use-slicers-to-filter-PivotTable-data-249f966b-a9d5-4b0f-b31a-12651785d29d)? – Parfait

ответ

0

Добавьте фрагмент кода к вашим событиям «Sheet1».

Вызывается код внутри Intersect, только если ячейка, которая была дважды нажата, находится внутри столбца A (до последней строки, которая имеет название города внутри).

Я использую переменную Dim PvtTbl As PivotTable для установки «PivotTable2» в листе «Dillon Pivot» - это делает код намного короче и понятнее.

Код

Option Explicit 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 

Dim LastRow As Long 
Dim PvtTbl As PivotTable 

' find last row in Column A that has a city 
LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

' check if double-click was inside a range in Column A, where there is a city name 
' starting from row 2, assuming the first row is the header row 
If Not Intersect(Target, Range("A2:A" & LastRow)) Is Nothing Then 
    Application.ScreenUpdating = False 

    Set PvtTbl = Worksheets("Dillon Pivot").PivotTables("PivotTable2") 

    With PvtTbl 
     .ManualUpdate = True 
     .PivotFields("Match").ClearAllFilters 
     .PivotFields("Match").CurrentPage = Target.Value 
     .ManualUpdate = False 
    End With 
    Application.ScreenUpdating = True 
End If 

End Sub 
Смежные вопросы