powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / EXCEL PivotTable VisibleItemsList
18 сообщений из 18, страница 1 из 1
EXCEL PivotTable VisibleItemsList
    #39552239
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello world!
Источником сводной таблицы является OLAP-куб.
Скриптом ниже, беру конкретное поле куба.(ID = 387) и пытаюсь работать с его свойствами.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub TEST1()

Dim Main_WSH As Worksheet
    Set Main_WSH = ThisWorkbook.Worksheets("Общие показатели")
Dim Main_PT As PivotTable   ' Главная сводная таблица
    Set Main_PT = Main_WSH.PivotTables("PT_ОбщиеПоказатели")
    
Dim CubeField As Variant
Set CubeField = Main_PT.CubeFields(387)
Dim CubeFieldName As String
CubeFieldName = CubeField.Caption
Dim PivotField As Variant
Set PivotField = Main_PT.CubeFields(387).PivotFields(1)
Dim PivotFieldName As String
PivotFieldName = PivotField.Caption

Dim VisList As Variant
Set VisList = PivotField.VisibleItemsList.Count

End Sub


В конечном счете мне нужно добраться до свойства VisibleItemsList, которое отвечает за значения выбранные в фильтре этого поля.(как показано на скрине).

Подскажите, чем является VisibleItemsList? И как получить количество членов VisibleItemsList или конкретный член?
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39552243
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39552612
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

PivotField.VisibleItemsList возвращает массив. Там нету свойства Count.

Количество выбранных элементов можно определить так:
Код: vbnet
1.
2.
UBound(PivotField.VisibleItemsList) ' Зная, что индексация начинается с единицы
UBound(PivotField.VisibleItemsList) - LBound(PivotField.VisibleItemsList) + 1


А получить конкретное значение элемента можно так:
Код: vbnet
1.
2.
PivotField.VisibleItemsList()(1)
PivotField.VisibleItemsList()(2)
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39552780
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,
Спасибо! Теперь могу закончить свою задумку.
Но, еще хочется разобраться и с таким вопросом.
Судя по скр. свойство VisibleItemsList это одномерный.
Почему для обращения к элементу нужны дополнительные скобки?
Код: vbnet
1.
PivotField.VisibleItemsList()(1)


Протестировал функцию Array. Почему-то получил двумерный массив. С чем это может быть связано?
Код: vbnet
1.
2.
Dim VisList As Variant
VisList = Array(PivotField.VisibleItemsList)
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39552787
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

потому что:
Код: vbnet
1.
VisList = Array(PivotField.VisibleItemsList)


Массив в массиве...
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39552801
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,
Спасибо! С этим подпунктом разобрался.

Остался только вопрос про вторые скобки
Код: vbnet
1.
PivotField.VisibleItemsList()(1)
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39552805
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2Остался только вопрос про вторые скобки
тогда не понятно с чем Вы разобрались. Вторые скобки это и есть обращение к массиву внутри другого массива. Если записать нечто вроде:
Код: vbnet
1.
VisList = PivotField.VisibleItemsList


то вторые скобки не потребуются.
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39552846
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,
С этим я поэкспериментировал
Код: vbnet
1.
VisList = PivotField.VisibleItemsList



PivotField.VisibleItemsList - это массив

Но PivotField.VisibleItemsList(1) дает ошибку
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39552847
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В посте выше, не тот скрин
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39552943
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2PivotField.VisibleItemsList(1) дает ошибкуЭто свойство не предполагает обращение к отдельным его элементам напрямую.

В самой ошибке написана причина, кстати. VisibleItemsList - это свойство, представляющее собой массив элементов. Надо попробовать объявить VisList как массив явно:
Код: vbnet
1.
2.
dim VisList()
VisList = PivotField.VisibleItemsList


Хотя не совсем понятно зачем это все вообще.
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39555338
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,
В моей книге есть несколько сводных таблиц имеющих один источник (OLAP-куб)
Одна из них является мастер таблицей, и показывает отчетные данные в разрезе всей компании.
Другие, уже более в мелких разрезах. Например, по товарным группам или филиалам и д.т.
Нужно автоматизировать настройку одинаковых фильтров во всех сводных таблицах.
Условия фильтрации, во всех сводных должны перестраиваться, если что-то изменилось в фильтрах на главной таблице.
Например, на основной таблице поменяли год => все остальных таблицах показатель год, тоже должны перестроиться.
Для этого я использую событие Change и в том числе свойство VisibleItemsList.
В мастер таблице находится порядка 10 показателей, на которые пользователь устанавливает фильтры.
Чтобы лишний раз не перестраивать те показатели, которые не изменились, нужно анализировать значения, которые уже установлены.
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39561710
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yagrus2,
Если набор данных один, изменяться будут только фильтры, можно данные представлять не самой сводной, а функцией экселя ПолучитьДанныеСводнойТаблицы. И в этой формуле значения полей для выборки определять в одной (для каждого поля) ячейке.
или макросами смотреть.
Код: vbnet
1.
2.
3.
Dim pvt As Pivottable, pF As Pivotfilter
Set pvt = Activesheet.Pivottables(1)
Set pF = pvt.pivotfelds(1).Pivotfilters(1)
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39561774
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobgos,

Почему бы не использовать слайсер ? Его можно привязать к нескольким таблицам.
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39562266
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yagrus2В моей книге есть несколько сводных таблиц имеющих один источник (OLAP-куб)
Одна из них является мастер таблицей, и показывает отчетные данные в разрезе всей компании.
Другие, уже более в мелких разрезах. Например, по товарным группам или филиалам и д.т.
Нужно автоматизировать настройку одинаковых фильтров во всех сводных таблицах.
Условия фильтрации, во всех сводных должны перестраиваться, если что-то изменилось в фильтрах на главной таблице.
Например, на основной таблице поменяли год => все остальных таблицах показатель год, тоже должны перестроиться.
Для этого я использую событие Change и в том числе свойство VisibleItemsList.
В мастер таблице находится порядка 10 показателей, на которые пользователь устанавливает фильтры.
Чтобы лишний раз не перестраивать те показатели, которые не изменились, нужно анализировать значения, которые уже установлены.
big-dukeПочему бы не использовать слайсер ? Его можно привязать к нескольким таблицам. Да наверное, но отбор тоже нужно устанавливать. А можно иметь текущий.
У слайсеров какие ограничения? И как использовать для нескольких сводных?

Yagrus2,
Добрался до Excel - мой код не работает ))) И вообще свойства Filter нет. Киньте книгой с олап и сводной о которой речь. Созданная сводная почему то не имеет свойств на скринах.

Задача частая, я раньше решал через встроенную функцию: =ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ.
Т.е. готовил несколько листов с нужными форматами, например если нужно обновить данные по фильтру - дате, привязывал даты к одной ячейке с формулой =СЕГОДНЯ(). Каждый новый период (день/месяц/год - что есть в сводной) все листы обновляются сами. Механизмы и форматы сводной пугают своей самопроизвольностью, а агрегация неудовлетвроительная. По мне лучше уж использовать запросы к той же сводной, нежели десяток сводных заново настраивать каждый день. Хотя настройка не менять форматы при обновлении есть, но работает она (если не ошибаюсь) только если просто нажать обновить, а если пришлось поменять список полей все заново.

Может проще будет вносить изменения в сам куб, чем все сводные править.
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39562374
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobgos,

На моем скриншоте как раз и показано, как один слайсер прицепить к нескольким сводным таблицам.
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39562866
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-dukeНа моем скриншоте как раз и показано, как один слайсер прицепить к нескольким сводным таблицам.Это я понял. Как это сделать в 2010 офисе - чтобы появилась вторая сводная в списке? менюшки не нашел
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39562868
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
EXCEL PivotTable VisibleItemsList
    #39563104
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobgos,

2010 под рукой нет, вот кино
YouTube Video
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / EXCEL PivotTable VisibleItemsList
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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