Сохранение данных, расположенных снизу умных и сводных таблиц при их расширении

Автор VadimSh, 09.10.2023, 22:08

« назад - далее »

VadimSh

Добрый вечер. Помогите пожалуйста решить проблему. На Листе 1 имеется умная таблица, на Листе 2 - сводная. На листах снизу этих таблиц имеются данные, которые должны сохраниться и опускаться вниз при расширении данных таблиц. Нашел где-то решение для 2 умных таблиц, расположенных друг над другом. Вроде внедрил для Листа 2, но для этого пришлось заводить еще одну (пустую) умную таблицу.
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("Таблица1")) Is Nothing Then
        a = Target.Row
        b = Range("Таблица2").Row
        If b - a = 3 Then
            Rows(a + 1).Insert Shift:=xlDown
            Rows(a * 2 + 2).Insert Shift:=xlDown
        End If
    End If
End Sub
Но для Сводной (Лист 1) ничего не получается. Может быть есть другое решение?. Заранее спасибо

Serge 007

Здравствуйте

Для сводной таблицы можно использовать другой алгоритм (макрос срабатывает на обновление сводной)
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim LR&
    LR = Cells(Rows.Count, 1).End(xlUp).Row
    Range("b" & LR + 2) = "Строка должна остаться"
End Sub
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

VadimSh

Я может не корректно описал задачу.
На Листе2 расположена умная таблица. Ниже этой таблицы имеются строки с различными данными. При добавлении новых данных в умную таблицу она расширяются вниз и забивают своими данными эти строки. В форумах нашел готовый код для двух умных таблиц, расположенных друг над другом. Использовал его для Листа2. Для этого пришлось вставить ненужную мне умную таблицу и скрыть ее. Если я правильно понял код высчитывает разницу между последней строкой верхней Таблицы и первой строкой нижней Таблицы и если есть изменения добавляет 1 строку между ними. Тут вроде все понятно - данный код поддерживает постоянное количество строк между двумя умными таблицами.

VadimSh

Проблема возникла со сводной таблицей на Листе1. В отличии от умных таблиц которые могут увеличиваются на 1 строку сводная таблица при обновлении может увеличиться на любое количество строк.
Например сводная таблица занимает сроки с 1 по 10. В 12 строке и ниже имеются другие Данные, которые не относятся к сводной таблице. После добавления данных в умной таблице и обновлении сводной она стала занимать строки с 1 по 15 (добавились 5 строк), при этом затерло все что было с 12 по 15 строку. Как реализовать так что-бы при обновлении сводной таблицы нужные мне строки смещались вниз на то количество строк, что добавились в сводную таблицу и данные не терялись?

Serge 007

Я же выложил код выше
Он делает как раз то что Вам нужно
Что не так?
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390


VadimSh

Цитата: Serge 007 от 10.10.2023, 16:34Я же выложил код выше
Он делает как раз то что Вам нужно
Что не так?
Спасибо за ответ, но ваш код просто создает ячейку с определенной записью, которая прописана в коде, внизу сводной таблицы А мне нужно чтобы все данные ниже сводной таблицы, независимо от их содержания и количества, должны динамически опуститься вниз на то количество строк, на сколько увеличилась сводная таблица (и наоборот). После вашего кода выходит запрос "В Лист2 уже содержатся данные. Вы хотите их заменить?". Если нет таблица не обновляется, если да затирает все данные
На Листе2 пусть и коряво, но это реализовано с 2-мя умными таблицами.   

VadimSh