powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Программно изменить фильтр в Pivot Table
6 сообщений из 6, страница 1 из 1
Программно изменить фильтр в Pivot Table
    #38140751
Фотография byverka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне необходимо написать код, который либо изменяет либо присваивает значение фильтру в Pivot Table.
Ниже код, который работает, но он просто сбрасывает значение фильтра в All:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
    Public Sub Main()

        Dim FULLFILENAME As String = "C:\VB\Change_Cube_Filter\CompareOfData.xls"

        Dim excel As New Microsoft.Office.Interop.Excel.Application
        Dim wb As Microsoft.Office.Interop.Excel.Workbook
        Dim ws As Microsoft.Office.Interop.Excel.Worksheet
        Dim pt As Microsoft.Office.Interop.Excel.PivotTable
        Dim pf As Microsoft.Office.Interop.Excel.PivotField

        wb = excel.Workbooks.Open(Replace(FULLFILENAME, """", ""))
        ws = CType(wb.Sheets("Нераспознанная номенклатура"), Worksheet)
        pt = CType(ws.PivotTables("СводнаяТаблица3"), PivotTable)
        pf = CType(pt.PivotFields("[Дистрибутор].[ФО].[ФО]"), PivotField)

        pf.ClearAllFilters()

        wb.RefreshAll()
        wb.Save()
        wb.Close()

        excel.Quit()
        Runtime.InteropServices.Marshal.ReleaseComObject(excel)

        GC.Collect()

        Dts.TaskResult = Dts.Results.Success
    End Sub



А мне нужно либо конкретное значение присвоить, либо одно из возможных в списке фильтра, пробовала следующий код:

Код: vbnet
1.
pt.PivotFields("[Дистрибутор].[ФО].[ФО]").PivotItems("MOSCOW").Visible = True


подсвечивает эту строку предупреждением: Option strict on disallows late binding.
Пробовала разные варианты написания, все подсвечиваются таким образом.

Пишу этот код в редакторе объекта ScriptTask в пакете SSIS.
...
Рейтинг: 0 / 0
Программно изменить фильтр в Pivot Table
    #38140799
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
byverka,

Простое решение, выключить проверку типов Option Strict Off вначале файла, но не рекомендуется, или привести типы как в вашем коде через CType
...
Рейтинг: 0 / 0
Программно изменить фильтр в Pivot Table
    #38141151
Фотография byverka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLADbyverka,

или привести типы как в вашем коде через CType

Не совсем понимаю как мне привести типы файлов через Ctype в строке кода (к сожалению я очень плохо разбираюсь в программировании на vb):

Код: vbnet
1.
pt.PivotFields("[Дистрибутор].[ФО].[ФО]").PivotItems("MOSCOW").Visible = True
...
Рейтинг: 0 / 0
Программно изменить фильтр в Pivot Table
    #38141281
Фотография byverka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLADbyverka,

Простое решение, выключить проверку типов Option Strict Off вначале файла, но не рекомендуется

Нашла где выключить проверку типов, в свойствах проекта.
Но теперь этот код просто не работает, получаю ошибку:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Невозможно получить свойство PivotItems класса PivotField

   в Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o, Type objType, String name, 
Object[] args, String[] paramnames, Boolean[] CopyBack)
   в Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, 
String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)
   в ScriptTask_97e2e88bf3484e4eab7ada2527ac52b2.ScriptMain.Main()
...
Рейтинг: 0 / 0
Программно изменить фильтр в Pivot Table
    #38142080
basicv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
byverka,
я фильтры включал следующем образом:
Код: vbnet
1.
2.
3.
4.
Sheet1.PivotTables("Pivot 1").PivotFields( _
            "[Dim Short Date].[Short Date Str].[Short Date Str]").VisibleItemsList = Array( _
            "[Dim Short Date].[Short Date Str].&[" & LastNormaDate & "]", _
            "[Dim Short Date].[Short Date Str].&[" & PreviousNormaDate & "]")


при условии что включена галка 'Show multiple items'

или
Код: vbnet
1.
2.
3.
Sheet1.PivotTables("Pivot 1").PivotFields( _
            "[Dim Short Date].[Short Date Str].[Short Date Str]").VisibleItemsList = Array( _
            "[Dim Short Date].[Short Date Str].&[" & NormaDate & "]")


если нет
...
Рейтинг: 0 / 0
Программно изменить фильтр в Pivot Table
    #38143011
Фотография byverka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо basicv, я сама записала макрос и модифицировав его под свой девелопер получила результат, очень похожий на ваш:

Код: vbnet
1.
        ws.PivotTables("СводнаяТаблица3").PivotFields("[Дистрибутор].[ФО].[ФО]").CurrentPageName = "[Дистрибутор].[ФО].&[MOSCOW]"
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Программно изменить фильтр в Pivot Table
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]