|
|
|
Excel PivotTable: Доступ к фрагменту источника данных/фильтру сводной таблицы через ячейку
|
|||
|---|---|---|---|
|
#18+
Доброго времени вам! Подскажите пожалуйста, уважаемые спецы: С точки зрения интерфейса задача такая: при даблклике по области данных сводной таблицы на листе Excel 2007 (источник данных тут же на соседнем листе) запускается функция, которая хитрым образом обрабатывает строчки источника данных (те самые, что в обычном режиме выводятся на новый лист) - форматирует, добавляет данные, причем в зависимости от того, на какой таблице кликнули, кто кликнул и т.д. Проблема: если перехватить событие ДаблКлик, например через соответствующее событие в Workbook, то этих самых строчек (не ВСЕГО источника, а только имеющих отношение к данной ячейке) еще нет. КАК ИХ ДОСТАТЬ? Текущее решение - пользователи каждый раз после даблклика самостоятельно вызывают макрос, что их исключительно раздражает. так и видится какая-нибудь функция Public Function GetSourceData_from_Pivotcell(dataRangeCell as Excel.Range) as Variant , которая вернет ссылку на статически рекордсет, или массив, или что угодно, по ссылке на ячейку из сводной таблицы Даже более предпочтительный вариант - хотелось бы по даблклику по области данных получать не исходные данные, а фильтр этой ячейки сводной таблицы, чтобы иметь возможность отрабатывать в том числе и ячейки без данных (пустые). Хотел использовать автофильтр исходной таблицы функцией, найденной на www.contextures.com (см.приложенный зип), но она почему-то не всегда хочет работать в 2007 офисе PS порылся на форуме - нашел только обсуждения по получению всего источника данных, а нужен именно фрагмент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 13:08 |
|
||
|
Excel PivotTable: Доступ к фрагменту источника данных/фильтру сводной таблицы через ячейку
|
|||
|---|---|---|---|
|
#18+
skogkatt, я вот абсолютно ничего не понял из Вашего объяснения проблемы.. но вот почему нельзя в событии DoubleClick написать Call и вызывать автоматом тот макрос, который так раздражает необходимостью совего вызова пользователя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 15:04 |
|
||
|
Excel PivotTable: Доступ к фрагменту источника данных/фильтру сводной таблицы через ячейку
|
|||
|---|---|---|---|
|
#18+
PlanB, извиняюсь за корявое объяснение по-другому: Сейчас происходит так - (1) пользователь даблкликает ячейку Х в области данных на сводной таблице, (2) стандартное поведение Excel - появляется новый лист (пусть будет "Лист1") со строчками исходной таблицы, которые суммируются в ячейке Х (3) пользователь вызывает макрос. так вот, событие DoubleClick происходит ДО шага (2). В это время листа "Лист1" еще нет! Он появится только после выхода из события. Но ведь сам Эксель умеет "доставать" этот самый лист и эти самые строчки исходной таблицы? Вот я и хочу в обработчике DoubleClick добыть эти строчки , отменить стандартное поведение Excel на шаге (2) и самому отобразить эти строчки в нужном мне виде и сделать с ними все что надо. Вариант Б - добыть набор значений, определяющих значения полей сводной таблицы в этой ячейке - как это в сокращенном виде делает эксель во всплывающей подсказке (см. скриншот). Если на пальцах, по этому скриншоту, даблкликает юзер ячейку D9, обработчик события DoubleClick вызывает функцию, передает в функцию эту ячейку, а функция возвращает, к примеру, массив такого вида: Поле ЗначениеГруппа КЦГод 2011Месяц 201102 Вариант Б даже предпочтительней - позволяет работать с ячейками без значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 15:44 |
|
||
|
Excel PivotTable: Доступ к фрагменту источника данных/фильтру сводной таблицы через ячейку
|
|||
|---|---|---|---|
|
#18+
skogkatt, а что вам мешает: для 1 варианта: прописать программно появление требуемого листа (запишите для начала в макрорекордере), а потом программно же причесать его. для 2 варианта: использовать функцию =ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 15:57 |
|
||
|
Excel PivotTable: Доступ к фрагменту источника данных/фильтру сводной таблицы через ячейку
|
|||
|---|---|---|---|
|
#18+
PlanB, Первый способ - спасибо за помощь экстренейшему из реверсов, почему-то использовать Selection.ShowDetail = True совершенно не пришло в голову :) Рекордер как всегда помог Для второго варианта функция ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ() не пойдет... нужна, так сказать, обратная функция. ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ(), насколько я понимаю, по набору данных {[Поле, Значение],..} возвращает данные, хранящиеся в отчет (из области данных или итогов). А мне нужно наоборот - скормить функции адрес ячейки в области итогов или области данных и получить из функции набор данных {[Поле, Значение],..} (см. таблицу выше). Тут видимо придется перебирать ColumnItems и RowItems из PivotCell.. Надеялся, что-нибудь попроще будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 16:26 |
|
||
|
Excel PivotTable: Доступ к фрагменту источника данных/фильтру сводной таблицы через ячейку
|
|||
|---|---|---|---|
|
#18+
такие тоже есть, вроде.. почитайте ф-ции работы с базой.. или около того ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 17:05 |
|
||
|
Excel PivotTable: Доступ к фрагменту источника данных/фильтру сводной таблицы через ячейку
|
|||
|---|---|---|---|
|
#18+
пораскинул мозгами - нет такого. первый вариант однозначно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 17:09 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=37611500&tid=2176123]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 375ms |

| 0 / 0 |
