2016-08-25 3 views
0

У меня довольно сложная модель данных (встроенная в PowerPivot), где у меня есть некоторые слайсеры в Dashboard. Все симпатичные и денди, однако, я хочу, чтобы эти slicers были применены к другой таблице, которая не является (и не может быть) частью DataModel.Использование выбора Slicers в Формуле или VBA

Поэтому я использую Excel UDF для захвата выбора слайсеров. Часть, с которой я борюсь, начинается здесь. Мне нужно использовать выбор, который я захватил из slicers, и использовать VBA для фильтрации UnLinked Table, или использовать формулу SUMPRODUCT/SUMIFS для вычисления результатов, которые я хочу получить из UnLinkedTable. Например, если в «ПРОДУКЦИИ» Slicer я выбираю «A», «B», «C» и «D», моя формула UDF возвращает: «A, B, C, D». Если в slicer выбрано все, формула возвращает «Все элементы».

Теперь, как я могу фильтровать в VBA столбце UnLinkedTable [PRODUCT] с использованием результатов «A, B, C, D» или как написать формулу SUMPRODUCT или SUMIFS в Excel? Имейте в виду, что в таблице UnLinked есть несколько слайсеров и несколько столбцов. Я высоко ценю вашу помощь!

+0

так что вы спросили 7 вопросов перед этим и никогда не принял ни одного ответа .. хмм ... – cyboashu

+0

Просто чтобы быть ясно, когда вы говорите,„таблица“вы имеете в виду Таблица Excel (aka ListObject)? Или вы говорите о сводной таблице? – jeffreyweir

+0

Я имею в виду таблицу Excel, а не сводную таблицу – jb007

ответ

0

Мне удаётся решить мою проблему с помощью немного VBA. Если кто-то заинтересован в решении, вот оно:

[SelectionsInSlicerBrand] -> this is the named range for the cell where my UDF brings the slicer selection 
BrandFilters = Split([SelectionsInSlicerBrand], ",") 
If [SelectionsInSlicerBrand] <> "All Items" Then 
ActiveSheet.ListObjects("TableFilterVBA").Range.AutoFilter Field:=1, Criteria1:=(BrandFilters), Operator:=xlFilterValues 
Else 
ActiveSheet.ListObjects("TableFilterVBA").Range.AutoFilter Field:=1 
End If 

Однако теперь у меня другой вопрос. Я тестировал формулу Slicer UDF на обычной сводной таблице, и она работала нормально. Однако, когда я создаю PowerPivot PivotTable, UDF больше не работает. Основываясь на том, что я прочитал по следующей ссылке, возможно, это связано с тем, что PowerPivot PivotTable основан на OLAP, поэтому мне нужно использовать SlicerCacheLevel, а не SlicerCache, например, мой UDF использует: PowerPivot Slicer selection based on cell value using VBA Я выложу здесь полный код для моего UDF, который снова, очень хорошо подходит для выбора слайсера обычной сводной таблицы. Если вы можете изменить его и работать на PowerPivot, это было бы потрясающе. UDF можно найти здесь: «http://www.jkp-ads.com/Articles/slicers05.asp

Public Function GetSelectedSlicerItems(SlicerName As String) As String 
    Dim oSc As SlicerCache 
    Dim oSi As SlicerItem 
    Dim lCt As Long 
    On Error Resume Next 
    Application.Volatile 
    Set oSc = ThisWorkbook.SlicerCaches(SlicerName) 
    If Not oSc Is Nothing Then 
     For Each oSi In oSc.SlicerItems 
      If oSi.Selected Then 
       GetSelectedSlicerItems = GetSelectedSlicerItems & oSi.Name & ", " 
       lCt = lCt + 1 
      ElseIf oSi.HasData = False Then 
       lCt = lCt + 1 
      End If 
     Next 
     If Len(GetSelectedSlicerItems) > 0 Then 
      If lCt = oSc.SlicerItems.Count Then 
       GetSelectedSlicerItems = "All" 
      Else 
       GetSelectedSlicerItems = Left(GetSelectedSlicerItems, Len(GetSelectedSlicerItems) - 2) 
      End If 
     Else 
      GetSelectedSlicerItems = "No items selected" 
     End If 
    Else 
     GetSelectedSlicerItems = "No slicer with name '" & SlicerName & "' was found" 
    End If 
End Function 
Смежные вопросы