Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Программно изменить фильтр в Pivot Table / 6 сообщений из 6, страница 1 из 1
06.02.2013, 20:19
    #38140751
byverka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно изменить фильтр в Pivot Table
Мне необходимо написать код, который либо изменяет либо присваивает значение фильтру в 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
06.02.2013, 21:11
    #38140799
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно изменить фильтр в Pivot Table
byverka,

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

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

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

Код: vbnet
1.
pt.PivotFields("[Дистрибутор].[ФО].[ФО]").PivotItems("MOSCOW").Visible = True
...
Рейтинг: 0 / 0
07.02.2013, 11:11
    #38141281
byverka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно изменить фильтр в Pivot Table
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
07.02.2013, 16:41
    #38142080
basicv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно изменить фильтр в Pivot Table
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
08.02.2013, 11:08
    #38143011
byverka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно изменить фильтр в Pivot Table
Спасибо basicv, я сама записала макрос и модифицировав его под свой девелопер получила результат, очень похожий на ваш:

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


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