Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Перехват ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ, пользователь сделал двойной клик на данных сводной таблицы, надо понять, какие данные он взял
 
Xapa6apga, большое спасибо за решение и за такую оперативность!

Ничто не устоит на пути автоматизации )))
Перехват ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ, пользователь сделал двойной клик на данных сводной таблицы, надо понять, какие данные он взял
 
Xapa6apga, спасибо большое за скрипт!
Отдельное спасибо за красивый обработчик ошибок сводной.
У нас была наспех написанная заплатка, заменю на ваш красивый и подробный обработчик.
Разделение экрана на 2 независимые части
 
А просто кнопка "Вид/Новое окно"? Окошки тогда прокручиваются отдельно.
Не решает, правда, проблемы со скрытыми столбцами. Одинаково в обоих окнах они отображаются.
Перехват ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ, пользователь сделал двойной клик на данных сводной таблицы, надо понять, какие данные он взял
 
Нашел!
У ячейки сводной таблицы есть PivotField.Caption - То же, что идет в заголовок "Сумма по полю Заказ"
PivotFiled.SourceName - поле в исходной таблице, на которой построена сводная - "Заказ"
PivotCell.RowItems - список элементов-фильтров сводной
PivotCell.RowItems.Item1.SourceName - имя первого элемента - "33 Коровы"
PivotCell.RowItems.Item1.Parent.SourceName - имя поля таблицы для первого элемента - "Производитель"

Оказалось, что грабли, которых я боялся - элементы таблицы могут быть переименованы пользователем - обходятся легко.
SourceName ссылается именно на оригинальное имя.

Вопрос пока не решенный - сгруппированные поля.
Как понять, из каких элементов сгруппировано поле?
В сводной появляется новое поле "Производитель2", состоящее из нескольких элементов поля "Производитель".

PivotCell.RowItems.Item1.Parent.ChildField.SourceName - имя оригинального поля, на котором построена группа - "Производитель"

Не могу найти, где список элементов, входящих в эту группу.
Перехват ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ, пользователь сделал двойной клик на данных сводной таблицы, надо понять, какие данные он взял
 
Xapa6apga, приложил. Первый лист - то, как данные лежат в оракловой базе. Второй - сама сводная. Третий и четвертый - результаты клика пользователя на разных ячейках. Выборки получилось, что пересекаются. Соответственно, когда пользователь добавит что-то в первой выборке, хочется это представить и на второй выборке, т.к. оно должно туда подходить по фильтрам.
Перехват ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ, пользователь сделал двойной клик на данных сводной таблицы, надо понять, какие данные он взял
 
Казанский, спасибо, воспользуюсь. Не получается понять, какие фильтры были включены на сводной таблице.
Xapa6apga, что такое учетная система?
Сейчас в экселе на листе с выбранными данными 95% операций - это UPDATE. Эксель красит измененные значения, запускается макрос, по ключу находится запись в базе, запускается UPDATE для измененных полей.

Новые строчки нужны, чтобы пользователь с ними мог работать. Система многопользовательская. Новые строчки могут быть внесены другими пользователями.
А могут быть внесены и этим же пользователем, просто на другом листе он откроет эту же выборку и добавит строку.
Перехват ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ, пользователь сделал двойной клик на данных сводной таблицы, надо понять, какие данные он взял
 
Мысь шальная появилась. При наведении на ячейку в области данных сводной таблицы всплывает подсказка. Может, из неё можно выбрать нужные данные?
Перехват ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ, пользователь сделал двойной клик на данных сводной таблицы, надо понять, какие данные он взял
 
PooHkrd,так меня функционал двойного клика полностью устраивает. Когда на сводной таблице стоишь - там как раз нет проблем. Можно обновить сводную, она подключена к базе, сразу обновится. Проблема когда пользователь работает на листе с вытащенными данными. Там штатной кнопки "обновить" нет. Приходится выкручиваться макросом.

Я как-то экспериментировал с не сводной, а умной таблицей, подключенной напрямую к базе, но мне не очень понравилось. Сейчас часть логики обновления строк прописана в эксель, не хотелось от этого отказываться. Там дополнительные проверки, чтобы в базу не тыкать откровенно кривые данные.
Перехват ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ, пользователь сделал двойной клик на данных сводной таблицы, надо понять, какие данные он взял
 
Добрый день, друзья!

Подскажите, пожалуйста, каким способом в VBA можно получить строку, которую Excel сам подставляет в формулу ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ при включенной опции Параметры/Формулы/"Использовать функции GetPivotData для ссылок в сводной таблице"?


Глобально зада решается такая:
Сводная таблица произвольного формата, построенная на данных из оракловой базы.
Пользователь делает двойной клик на ячейке данных - штатный функционал Эксель создаёт новый лист с данными, которые составляют выбранную ячейку сводной.
Далее уже самодельная нахлобучка - открывшийся лист с данными можно править и запускать макрос, который будет писать изменения в оракловую базу.
Также есть макрос, который актуализирует выбранные данные из базы.

Проблема в том, что в базе могли появиться новые строки, внесенные другими пользователями.
Сейчас, чтобы увидеть эти строки, приходится обновлять сводную таблицу и заново двойным кликом вытаскивать данные.

Хочется доработать макрос обновления строк из базы, чтобы он кроме актуализации выбранных строк, дорисовывал ниже новые, которые бы появились там при двойном клике на ту же ячейку обновленной сводной таблицы.

Мне видится, что надо перехватить фильтры сводной таблицы при двойном клике и при обновлении дописать их к sql запросу к базе.

P.S. Предчувствую неизмеримое поле граблей при работе с переименованными столбцами и вычисляемыми полями, но до этого еще надо дойти.
Если кому-либо видятся более прямые и правильные пути решения этой задачи - буду очень признателен за советы и наставления.
Поиск универсального способа проверки существования свойства у объекта.,
 
Нет, проект не запаролен. Обычный модуль в файле, единственная особенность файла - "только чтение".

У меня 2010 эксель стоит.

На виртуалке потестил с 2003 действительно кнопка DEBUG не пропадает.
Хороший он был, этот 2003, но перейти обратно уже не вариант.
UPD. Нашел 2013, там тоже кнопка есть. Только в 2010 такая лажа.
Изменено: Dissable - 01.12.2017 15:16:47
Поиск универсального способа проверки существования свойства у объекта.,
 
AAF,спасибо за подробный пример.
Дьявол как всегда оказался в деталях. Потестировал.
On Error GoTo 0, оказалось не совсем к тому же возвращает состоянию - пропадает кнопка DEBUG,
наглядно показывающая на каком месте программа дала сбой.
Ради неё и не включался ON ERROR в основном коде. Не готов отказаться от такой фичи.
В проекте постоянно что-то меняется. Необходимо оперативно править косяки.
Поиск универсального способа проверки существования свойства у объекта.,
 
Игорь, по вашей наводке попробовал typename(), но в случае с описанным примером - он что на ячейке сводной, что на обычной показывает один и тот же тип "range".

Была похожая проблема с необходимостью проверки существования второго столбца у комбобокса - там тоже typename(cboFactory) тип комбобокс выдаёт, что ничего не говорит и наличии в него свойства .column(1).
Нет ли чего-то вроде Object.getOwnPropertyNames()?
Казанский, спасибо за ссылочки. Selection и Active - у нас, вроде, везде по прямому назначению и используются, для взаимодействия с пользователем и его выбором.
А с ActiveSheet до этого не приходило в голову, что теоретически можно успеть переключить лист прямо во время выполнения макроса.

А про обработку ошибок - пробовал, но отказался, т.к. в программе может быть много других ошибок - программа активно взаимодействует с пользовательским выбором, а это всегда источник возможных ошибок.
Поиск универсального способа проверки существования свойства у объекта.,
 
Игорь, спасибо, попробую проверку на тип объекта.
Ошибок то много может быть, не только в этом месте, а при resume next он дальше будет скрипт обрабатывать, а иногда это критично. Надо тогда будет все возможные проверять? Или это тоже как-то обходится?

Казанский, а чем Selection плох? Есть какая-то замена, более правильная?
Поиск универсального способа проверки существования свойства у объекта.,
 
Добрый день, друзья!

Столкнулся с необходимостью проверки существования конкретного свойства у объекта, чтобы не встречать ошибку  (Run-time error '1004')  Не нашел какого-то универсального решения.
Пример
Код
MsgBox (Selection.PivotItem.Caption)  
Если при выполнении выделена ячейка строк сводной таблицы - покажет заголовок,
если нет - Run-time error '1004'.
Уровень проекта не позволяет использовать "On error resume next" внутри основного кода.

Пока выкручиваюсь отдельной функцией для проверки каждого подобного случая, но это крайне неэстетично и громоздко.
Уверен, что есть более красивое решение. Буду очень признателен за подсказки, в каком направлении копать.
Страницы: 1
Наверх