Страницы: 1
RSS
VBA. Расширение диапазона между двумя сводными таблицами на одном листе, Исключить перекрытие данных при изменении размера сводной таблицы
 
Здравствуйте!
Дано, две сводных на одном листе, горизонтально

При обновлении левой добавляются данные.
Как сделать автоматическое добавление столбцов между сводными без перекрытия\стирания данных?  
Изменено: Sanja - 12.07.2024 09:29:16 (Изменил название темы)
 
Можно попробовать макросом
Согласие есть продукт при полном непротивлении сторон
 
пользуйтесь поиском
 
Спасибо, но там должен не текст оставаться, а не вторая таблица)
Изменено: Борис Ольвовский - 11.07.2024 17:40:49
 
- Сразу видно, румын.
- Болгарин.
- А какая разница!

Разместите вторую таблицу с запасом ниже, скройте пустые строки, воспользуйтесь макросом из той ссылки.
 
Цитата
Борис Ольвовский написал:
Спасибо, но там..
Пожалуйста, но 'там' это где? Все эти Сводные и прочие тексты где-то у Вас.
Файл-пример приложите. Как есть - Как надо
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Файл-пример приложите. Как есть - Как надо
Вот. При добавлении столбцов в левую происходит перекрытие..
При расположении вертикально тоже самое..

А нужно автоматическое расширение диапазона (если правильно выражаюсь)
Изменено: Борис Ольвовский - 11.07.2024 17:42:54 (добавил файл)
 
Цитата
Борис Ольвовский написал:
Вот.
Новый поворот
Нет файла
Изменено: Sanja - 11.07.2024 17:43:31
Согласие есть продукт при полном непротивлении сторон
 
В модуль листа со сводными
Скрытый текст
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
В модуль листа со сводными
Спасибо!
 
Цитата
Sanja написал:
В модуль листа со сводными
Имхо, всё же правильнее строку "Application.ScreenUpdating = True" вставлять перед End If, поскольку отключение обновление экрана происходит внутри If. То есть, весь код должен выглядеть так:
Код
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
If Target.Name = "СводнаяТаблица1" Then
  Dim fRow&, fClmn&
  Application.ScreenUpdating = False
  With Target.TableRange2
    fRow = .Row + .Rows.Count + 1
    fClmn = .Column + .Columns.Count + 1
  End With
  'раздвинуть строки
  Me.Range(Me.Cells(1, 1), Me.Cells(112, 1)).EntireRow.Hidden = False
  Me.Range(Me.Cells(fRow, 1), Me.Cells(112, 1)).EntireRow.Hidden = True
  'раздвинуть столбцы
  Me.Range(Me.Cells(1, 2), Me.Cells(1, 100)).EntireColumn.Hidden = False
  Me.Range(Me.Cells(1, fClmn), Me.Cells(1, 100)).EntireColumn.Hidden = True
  Application.ScreenUpdating = True
End If
End Sub

     Конечно, это в принципе ни на что не влияет, просто в варианте из поста 9, если на листе нет таблицы с именем "СводнаяТаблица1", макрос будет включать обновление экрана, которое и так включено.
Изменено: Счастливчик - 12.07.2024 17:25:08
 
Цитата
Счастливчик написал:
макрос будет включать обновление экрана, которое и так включено
Так и задумано)
Это идет от привычки включать обработку событий в любых событийных макросах не зависимо от развития событий (во загнул про события  :D )
Во многих случаях, при работе событийных процедур, в начале необходимо отключать обработку событий. Поэтому, пару строк
Код
Application.EnableEvents = True
Application.ScreenUpdating = True

всегда выношу за все скобки условия, что бы обработка событий не отвалилась, при аварийном завершении макроса. По хорошему еще On Error Resume Next нужно вначале прописать
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх