Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2022, 13:58   #11
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
По умолчанию

Сергей, а принципиально важно сохранять данные на текущем листе ?
если нет, то можно перед закрытием:
1.создать новый лист
2. скопировать-вставить (только значения)
3. скопировать вставить (форматы таблицы)
4. удалить лист (или скрыть лист если есть связи)

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

как вам такой вариант?
АННА-ЕАО вне форума Ответить с цитированием
Старый 30.08.2022, 14:09   #12
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
По умолчанию

кстати как вариант еще, если важно оставить сам лист :
перед закрытием листа:
-создать новый лист
-копировать таблицу - вставить форматы (на этот новый лист)
-на листе со СВ.ТАБЛ. копировать - вставить значения
-далее копировать с нового листа таблицу и вставить формат на лист где СВ.табл
-удалить созданный промежуточный лист
АННА-ЕАО вне форума Ответить с цитированием
Старый 30.08.2022, 19:45   #13
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

Цитата:
Сообщение от Serge 007 Посмотреть сообщение
Если скопировать сводную (именно саму сводную, а не диапазон в котором она находится) и вставить её в новое место, то да, стиль сохранится
Нет, не так а так:
Если скопировать диапазон в котором сводная находится (даже его часть) и вставить его в новое место, то да, стиль сохранится.

Не знаю как, но Excel и VBA с этим справятся. Хотя сводная и её стиль это другие объекты, поэтому для меня это загадка. Но вставлять, да, надо на новое место.

С остальным спорить не буду, но вы сами говорите >>весь лист копируется и вставляется<<.
Для меня это тоже загадка, почему уже другая задача, если я хочу сохранить стиль как у сводной.
Возможно ведь вставить на новое место. В жизни не бывает всё так прямолинейно и гладко... (и надо иногда хитрить).

Впрочем, вопрос и в том, действительно ли должен быть стиль скопированой таблицы точно такой же как у сводной.
Будет ли уж такой большой ошибкой просто сформатировать её как >>умную<< со своим, пусть другим, стилём.
Elixi вне форума Ответить с цитированием
Старый 01.09.2022, 17:55   #14
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

При копировании сводной таблицы и вставке её данных как значений (вместе с форматами) созданный стиль сводной таблицы НЕ СОХРАНЯЕТСЯ, куда бы вы её не копировали
В этом то и вопрос - как обойти это ограничение

VBA с этой задачей так же не справляется, всё, собственно, и происходит в макросе:
циклом в цикле перебираются все книги в папке, все листы в этих книгах, данные копируются и вставляются как значения, после чего книги отправляются адресатам
В процессе работы макроса сохраняется все форматирование книг, кроме стилей сводных таблиц, которых суммарно более тысячи разных видов
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 02.09.2022, 05:14   #15
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

Цитата:
Сообщение от Serge 007 Посмотреть сообщение
В процессе работы макроса сохраняется все форматирование книг, кроме стилей сводных таблиц, которых суммарно более тысячи разных видов
Serge 007, можете выложить пример такой книги со сводными таблицами?
Elixi вне форума Ответить с цитированием
Старый 02.09.2022, 09:18   #16
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Пример во вложении
Вложения
Тип файла: xlsx PT_example.xlsx (28.1 Кб, 3 просмотров)
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 02.09.2022, 19:21   #17
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

Цитата:
Сообщение от Serge 007 Посмотреть сообщение
Пример во вложении
Если пользоваться стандартными, встроенными форматами сводных таблиц здесь особых ппроблем не должно быть.
Если пользоваться собственными форматами с применением градиента цвета (как это есть в ваших сводных таблицах), то вопрос по моему стоит немножко иначе: "Возможно ли
в Excel 2007 применить к диапазону (нескольким ячейкам вместе) плавный градиент цвета?"

Здесь (например) какое-то решение для применение градиента цвета к нескольким ячейкам описивают:
https://ru.extendoffice.com/document...ple-cells.html

Возможность пересчитать покраску ячеек для ваших нужд похоже существует.
Но знаете, если найдётся кто-то кто сделает эти расчёты для ваших сводных таблиц, пусть отпишется.
Возьму отпуск, приду и пожму ему руку. :-)
(хотя, кто знает, возможно это не так сложно как кажется мне)

А для стандартных форматов сводных таблиц можно форматы скопировать например так:
Код:
Sub CopyPivotTableFormats()
'   Копируем данные и форматы сводных таблиц

    Dim Sht As Worksheet
    Dim PvT As PivotTable
    
    Application.ScreenUpdating = False

        For Each Sht In ActiveWorkbook.Worksheets
            'перебираем все листы активной книги
            'Stop: Debug.Print Sht.Name
            If Sht.PivotTables.Count > 0 Then
                'если в листе находится сводная таблица добавляем новый лист
                Sheets.Add before:=Sht
                ActiveSheet.Name = Sht.Name & "#"
                
                Sht.Cells.Copy
                With Cells
                    'отдельно данные
                    'из листа со сводной таблицей копируем в новый лист все данные,
                    'нет уверенности в том что кроме сводной таблицы нет каких то
                    'данных в другом диапазоне листа, поэтому копируем данные здесь
                    '(заодно и ширину столбцов и форматы)
                    .PasteSpecial Paste:=xlPasteColumnWidths, _
                            Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                    .PasteSpecial Paste:=xlPasteFormats, _
                            Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                    .PasteSpecial Paste:=xlPasteValues, _
                            Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                End With
                Dim Rw&, RwL&
                
                For Rw = 1 To Sht.UsedRange.Rows.Count + Sht.UsedRange.Row - 1
                    Rows(CStr(Rw)).RowHeight = Sht.Rows(CStr(Rw)).RowHeight
                Next Rw
                
                For Each PvT In Sht.PivotTables
                    'отдельно форматы сводных...
                    'из листа со сводной таблицей копируем в новый лист форматы
                    'всех существующих сводных таблиц
                    'Если пользоваться стандартными, встроенными форматами сводных
                    'таблиц здесь особых ппроблем не должно быть.
                    'Если пользоваться собственными форматами с применением градиента
                    'цвета, то вопрос по моему стоит немножко иначе: "Возможно ли
                    'в Excel 2007 применить к диапазону (нескольким ячейкам вместе)
                    'плавный градиент цвета?"
                    Sht.Range(PvT.TableRange1.Address).Copy
                    With Range(PvT.TableRange1.Address)
                        .PasteSpecial Paste:=xlPasteFormats, _
                            Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                    End With
                Next
                
                'устраняем лист со сводной таблицей
                Application.DisplayAlerts = False
                    Stop: Sht.Delete
                Application.DisplayAlerts = True
                Cells(1, 1).Activate
                ActiveSheet.Name = Replace(ActiveSheet.Name, "#", "")
            End If
        Next
    Application.ScreenUpdating = True
End Sub
Elixi вне форума Ответить с цитированием
Старый 02.09.2022, 21:52   #18
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

Код:
' Ошибочка. Строка:
Rows(CStr(Rw)).RowHeight = Sht.Rows(CStr(Rw)).RowHeight
' правильно должна быть так:
Rows(Rw).RowHeight = Sht.Rows(Rw).RowHeight
Elixi вне форума Ответить с цитированием
Старый 05.09.2022, 09:51   #19
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Elixi Посмотреть сообщение
..для стандартных форматов сводных таблиц можно форматы скопировать например так...[/CODE]
Убогие штатные стили сохраняются и при простом копировании - вставке как значения, но это не применяется, нет в файлах штатных стилей

Цитата:
Сообщение от Elixi Посмотреть сообщение
...вопрос по моему стоит немножко иначе: "Возможно ли
в Excel 2007 применить к диапазону (нескольким ячейкам вместе) плавный градиент цвета?"[/CODE]
Не согласен, ведь совсем необязательно это будет градиент
В стилях сводных применяются и узоры, и простая заливка, измененные шрифты, границы и т.д.
В файле это есть

Цитата:
Сообщение от Elixi Посмотреть сообщение
...Возможность пересчитать покраску ячеек для ваших нужд похоже существует...
Может быть, но я решения не нашел
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 06.09.2022, 02:07   #20
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

Цитата:
Сообщение от Serge 007 Посмотреть сообщение
Убогие штатные стили сохраняются и при простом копировании - вставке
Serge 007, да, если копировать и вставлят весь UsedRange по одной ячейке. Если у вас маленкие сводные и сводных тоже не слишком много, можно и так.
А если хотите копировать сразу весь лист, тогда придётся копировать формат сводных таблиц отдельно.
У вас на листе три сводные таблицы и кроме них ещё другие данные и форматированные ячейки. Чтобы эти другие данные перенести (и формат тоже), копируется сначала весь лист. Но если взять и скопировать вес диапазон листа, и вставить его на новый лист, то вставится всё кроме стилей сводных таблиц. Из за этого нужно вставлять формат сводных таблиц отдельно, это во-первых, и во-вторих, формат сводных таблиц нужно копировать и вставлят точно в существующем диапазоне сводных таблиц, иначе не перенести и не сохранить даже те убогие штатные стили (кроме как по одной ячейке).

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

Цитата:
Сообщение от Serge 007 Посмотреть сообщение
Может быть, но я решения не нашел
Решение это, так себе решение (пересчёт градиента цвета на градиенты цветов отдельных ячеек). Идеально не получится. Похоже поэтому его и не найдёте (только примеры как это можно делать).
Elixi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
стиль таблицы вложенной в другую ifsoft HTML и CSS 2 29.08.2009 15:05
Данные из двух полей исх. таблицы в одно поле сводной таблицы Strelec79 Microsoft Office Excel 2 02.08.2009 13:59
Форматирование сводной таблицы eda Microsoft Office Excel 1 23.07.2009 11:16
Автообновление сводной таблицы kzld Microsoft Office Excel 0 07.07.2009 15:58