#excel #pivot-table #vba
#excel #сводная таблица #vba
Вопрос:
Привет, мне трудно перебирать срезы, чтобы узнать, отфильтрованы они или нет.
Моя цель — поместить весь выбранный срез на рабочий лист, чтобы я мог применить фильтр (от высокого к низкому) к базовым сводным данным, чтобы я мог выбрать «Топ-5 по бюджету» на основе выборок, сделанных в срезах данных.
У меня есть следующий код, но я получаю сообщение об ошибке: Run Time Error 438’ Object doesn’t support this method
Может кто-нибудь посоветовать, как я могу этого добиться.
Public Sub top_over_under_booked()
Dim oSi As SlicerItem
Dim oSlicercache As SlicerCache
Dim oSl As SlicerCacheLevel
Dim oPt As PivotTable
Dim oSh As Worksheet
Set target_ws = ThisWorkbook.Worksheets("Get Slicer Selections")
For Each oSlicercache In ThisWorkbook.SlicerCaches
For Each oPt In oSlicercache.PivotTables
oPt.Parent.Activate 'Slice Name
worksheet_name = UCase(oPt.Parent.Name)
If worksheet_name = UCase("Chart Analysis 5 Years") Then
column_no = 0
slicer_name = UCase(oSlicercache.Name)
Select Case UCase(oSlicercache.Name)
Case Is = "SLICER_FY1"
column_no = 1
Case Is = "SLicer_REPORT_PT_DEPT1"
column_no = 2
'There are actually loads more slicer which needs to ne ignored.
End Select
If column_no <> 0 Then
For Each oSl In ActiveWorkbook.SlicerCaches(oSlicercache.Name) ' <----- Error
For Each oSi In oSl.SlicerItems
'oSi.Selected = True
check_slicer_string = oSi.Value
'target_ws.Cells(ource_ws.Cells(65000, column_no).End(xlUp).Row 1, column_no) = oSlicercache.Value
Next
Next
End If
oPT.Parent.Name
End If
Next
Next
End Sub
Ответ №1:
существуют два разных Excel
использование Microsoft.Офис.Инструменты.Excel; использование Excel = Microsoft.Офис.Взаимодействие.Excel;
ПРИМЕР в ThisWorkbook.cs
public string SelectedReportCategories()
{
var selection = "";
var myTarget = this;
try
{
var caches = myTarget.SlicerCaches["Slicer_REPORT"];
foreach (Excel.SlicerItem slicerItem in caches.SlicerItems)
{
if (slicerItem.Selected)
selection = selection " " slicerItem.Name;
}
}
catch (Exception e)
{
ShowError("Configuration", (e.InnerException != null) ? e.InnerException.Message : e.Message);
}
return selection;
}