Сохранение значений среза на листе

#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;
    }