Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Классический макет сводной таблицы. VBA. - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Классический макет сводной таблицы. VBA. (Формулы)
Классический макет сводной таблицы. VBA.
Serge_007 Дата: Понедельник, 03.01.2011, 11:51 | Сообщение № 1
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Здравствуйте.

Записал макрорекордером такой макрос:
[vba]
Код
Sub CPT()
       ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
           "Лист!R1C1:R65536C3", Version:=xlPivotTableVersion10).CreatePivotTable _
           TableDestination:="", TableName:="СводнаяТаблица1", DefaultVersion:= _
           xlPivotTableVersion10
       ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
       ActiveSheet.Cells(3, 1).Select
       ActiveSheet.PivotTables("СводнаяТаблица1").InGridDropZones = True
End Sub
[/vba]

Вопрос:
Как изменить код, что бы при создании ЛЮБОЙ сводной в ЛЮБОМ файле InGridDropZones = True выполнялось автоматически?

ЗЫ Естественно Excel версий выше 2003.

Спасибо.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗдравствуйте.

Записал макрорекордером такой макрос:
[vba]
Код
Sub CPT()
       ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
           "Лист!R1C1:R65536C3", Version:=xlPivotTableVersion10).CreatePivotTable _
           TableDestination:="", TableName:="СводнаяТаблица1", DefaultVersion:= _
           xlPivotTableVersion10
       ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
       ActiveSheet.Cells(3, 1).Select
       ActiveSheet.PivotTables("СводнаяТаблица1").InGridDropZones = True
End Sub
[/vba]

Вопрос:
Как изменить код, что бы при создании ЛЮБОЙ сводной в ЛЮБОМ файле InGridDropZones = True выполнялось автоматически?

ЗЫ Естественно Excel версий выше 2003.

Спасибо.

Автор - Serge_007
Дата добавления - 03.01.2011 в 11:51
Hugo Дата: Понедельник, 03.01.2011, 15:15 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Попробуйте так (я сейчас проверить не могу):
строку
ActiveSheet.PivotTables("СводнаяТаблица1").InGridDropZones = True
замените на
[vba]
Код
For Each pt In ActiveSheet.PivotTables
pt.InGridDropZones = True
Next
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПопробуйте так (я сейчас проверить не могу):
строку
ActiveSheet.PivotTables("СводнаяТаблица1").InGridDropZones = True
замените на
[vba]
Код
For Each pt In ActiveSheet.PivotTables
pt.InGridDropZones = True
Next
[/vba]

Автор - Hugo
Дата добавления - 03.01.2011 в 15:15
Serge_007 Дата: Понедельник, 03.01.2011, 17:33 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Hugo)
Попробуйте так...
Игорь, код в Personal?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Hugo)
Попробуйте так...
Игорь, код в Personal?

Автор - Serge_007
Дата добавления - 03.01.2011 в 17:33
Hugo Дата: Понедельник, 03.01.2011, 18:19 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Нет, я думал, что надо в макросе предусмотреть универсальный вариант, без упоминания имени таблиц... Ну да в другом месте уже решили вопрос, как я понял smile


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНет, я думал, что надо в макросе предусмотреть универсальный вариант, без упоминания имени таблиц... Ну да в другом месте уже решили вопрос, как я понял smile

Автор - Hugo
Дата добавления - 03.01.2011 в 18:19
Serge_007 Дата: Понедельник, 03.01.2011, 18:22 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Hugo)
...в другом месте уже решили вопрос...

Не-а...
Чёт не пойму, почему макрос Игоря не всегда работает...
Пока вопрос не снят.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Hugo)
...в другом месте уже решили вопрос...

Не-а...
Чёт не пойму, почему макрос Игоря не всегда работает...
Пока вопрос не снят.

Автор - Serge_007
Дата добавления - 03.01.2011 в 18:22
nilem Дата: Понедельник, 03.01.2011, 19:40 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Просто для интереса проверил - работает. Вот это в стандартный модуль (Module1) книги Personal.xlsb
[vba]
Код
Sub CPT()
On Error Resume Next
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=ActiveSheet.Range("A1:C65536"), _
                      Version:=xlPivotTableVersion10).CreatePivotTable _
                      TableDestination:="", TableName:="СводнаяТаблица1", DefaultVersion:= _
                      xlPivotTableVersion10
If Err Then MsgBox Err.Description, 48: Exit Sub
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("СводнаяТаблица1").InGridDropZones = True
End Sub
[/vba]
(код взял из 1-го поста)
Т.е. переходим на лист с данными, жмем кнопочку "Шаблон сводной". Сводная образуется на новом листе.
Про кнопочку см. мультик: http://ifolder.ru/21136112


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Понедельник, 03.01.2011, 19:44
 
Ответить
СообщениеПросто для интереса проверил - работает. Вот это в стандартный модуль (Module1) книги Personal.xlsb
[vba]
Код
Sub CPT()
On Error Resume Next
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=ActiveSheet.Range("A1:C65536"), _
                      Version:=xlPivotTableVersion10).CreatePivotTable _
                      TableDestination:="", TableName:="СводнаяТаблица1", DefaultVersion:= _
                      xlPivotTableVersion10
If Err Then MsgBox Err.Description, 48: Exit Sub
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("СводнаяТаблица1").InGridDropZones = True
End Sub
[/vba]
(код взял из 1-го поста)
Т.е. переходим на лист с данными, жмем кнопочку "Шаблон сводной". Сводная образуется на новом листе.
Про кнопочку см. мультик: http://ifolder.ru/21136112

Автор - nilem
Дата добавления - 03.01.2011 в 19:40
Serge_007 Дата: Понедельник, 03.01.2011, 19:44 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (nilem)
...для интереса проверил - работает...

Так это мой код smile
А я говорил про код Игоря.

Николай, этот код подходит только для Range("A1:C65536"), а я просил

Quote (Serge_007)
...что бы при создании ЛЮБОЙ сводной...

И опять таки Destination не должна быть жестко привязана к А3...

Quote (nilem)
...переходим на лист с данными, жмем кнопочку "Шаблон сводной"...

Кнопочек никаких не должно быть, срабатывать должно автоматом.

Quote (nilem)
Сводная образуется на новом листе.

Сводная должна появляться там где я укажу, а не на новом листе.

Получится так?



ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (nilem)
...для интереса проверил - работает...

Так это мой код smile
А я говорил про код Игоря.

Николай, этот код подходит только для Range("A1:C65536"), а я просил

Quote (Serge_007)
...что бы при создании ЛЮБОЙ сводной...

И опять таки Destination не должна быть жестко привязана к А3...

Quote (nilem)
...переходим на лист с данными, жмем кнопочку "Шаблон сводной"...

Кнопочек никаких не должно быть, срабатывать должно автоматом.

Quote (nilem)
Сводная образуется на новом листе.

Сводная должна появляться там где я укажу, а не на новом листе.

Получится так?


Автор - Serge_007
Дата добавления - 03.01.2011 в 19:44
Serge_007 Дата: Понедельник, 03.01.2011, 19:51 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (nilem)
Про кнопочку см. мультик: http://ifolder.ru/21136112

За видео отдельное спасибо!
И тебя тоже с новым годом!


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (nilem)
Про кнопочку см. мультик: http://ifolder.ru/21136112

За видео отдельное спасибо!
И тебя тоже с новым годом!

Автор - Serge_007
Дата добавления - 03.01.2011 в 19:51
Serge_007 Дата: Вторник, 04.01.2011, 11:35 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Serge_007)
Получится так?

Нет идей?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Serge_007)
Получится так?

Нет идей?

Автор - Serge_007
Дата добавления - 04.01.2011 в 11:35
nilem Дата: Вторник, 04.01.2011, 11:38 | Сообщение № 10
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Quote (Serge_007)
Сводная должна появляться там где я укажу, а не на новом листе.
Получится так?

Ну можно в этот же код добавить инпутбоксы, типа "Щелкните в таблице с данными" и "Укажите место для сводной", можно еще "Задайте имя сводной". Но без кнопочки, имхо, никак.


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
Quote (Serge_007)
Сводная должна появляться там где я укажу, а не на новом листе.
Получится так?

Ну можно в этот же код добавить инпутбоксы, типа "Щелкните в таблице с данными" и "Укажите место для сводной", можно еще "Задайте имя сводной". Но без кнопочки, имхо, никак.

Автор - nilem
Дата добавления - 04.01.2011 в 11:38
Serge_007 Дата: Вторник, 04.01.2011, 11:59 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (nilem)
Но без кнопочки, имхо, никак.

Ладно, попробую объяснить по другому.
Начиная с Excel 2007 Мастер сводных таблиц по умолчанию создает новую сводную не в классическом виде, т.е. перетаскивание полей мышкой запрещено.
Приходится каждый раз выполнять надоевшую до одури одну и ту же комбинацию:
ПКМ по сводной - Параметры сводной таблицы - Вывод - ставлю галку на Классический макет сводной таблицы.
Вот и возникла идея исправить мелкомягкий косяк smile

Я рассуждал так: Раз уж есть строка кода, которая отвечает за снятие этой галки (InGridDropZones = True), значит можно запихать её в Personal и запускать при создании любой новой сводной. Можно?



ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (nilem)
Но без кнопочки, имхо, никак.

Ладно, попробую объяснить по другому.
Начиная с Excel 2007 Мастер сводных таблиц по умолчанию создает новую сводную не в классическом виде, т.е. перетаскивание полей мышкой запрещено.
Приходится каждый раз выполнять надоевшую до одури одну и ту же комбинацию:
ПКМ по сводной - Параметры сводной таблицы - Вывод - ставлю галку на Классический макет сводной таблицы.
Вот и возникла идея исправить мелкомягкий косяк smile

Я рассуждал так: Раз уж есть строка кода, которая отвечает за снятие этой галки (InGridDropZones = True), значит можно запихать её в Personal и запускать при создании любой новой сводной. Можно?


Автор - Serge_007
Дата добавления - 04.01.2011 в 11:59
Serge_007 Дата: Вторник, 04.01.2011, 12:02 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (nilem)
Ну можно в этот же код добавить инпутбоксы, типа "Щелкните в таблице с данными" и "Укажите место для сводной", можно еще "Задайте имя сводной"

И это всё не понадобится, потому как уже есть в PivotTableWizard.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (nilem)
Ну можно в этот же код добавить инпутбоксы, типа "Щелкните в таблице с данными" и "Укажите место для сводной", можно еще "Задайте имя сводной"

И это всё не понадобится, потому как уже есть в PivotTableWizard.

Автор - Serge_007
Дата добавления - 04.01.2011 в 12:02
Serge_007 Дата: Среда, 05.01.2011, 13:28 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Ответ вроде получил здесь.
Вот код от слэн, который надо вставить в Модуль Класса Personal:
[vba]
Код
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Application.EnableEvents = False
Target.InGridDropZones = True
Application.EnableEvents = True
End Sub
[/vba]
Если ещё кто смог бы объяснить как это работает...


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеОтвет вроде получил здесь.
Вот код от слэн, который надо вставить в Модуль Класса Personal:
[vba]
Код
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Application.EnableEvents = False
Target.InGridDropZones = True
Application.EnableEvents = True
End Sub
[/vba]
Если ещё кто смог бы объяснить как это работает...

Автор - Serge_007
Дата добавления - 05.01.2011 в 13:28
Serge_007 Дата: Вторник, 22.02.2011, 08:51 | Сообщение № 14
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Ни хрена оно не работает...
Совпадения были, файлы изначально созданные в 2003 попадались, это я только сейчас понял...
Знает кто-нибудь как эту галку автоматом поставить или нет?..


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеНи хрена оно не работает...
Совпадения были, файлы изначально созданные в 2003 попадались, это я только сейчас понял...
Знает кто-нибудь как эту галку автоматом поставить или нет?..

Автор - Serge_007
Дата добавления - 22.02.2011 в 08:51
GIG_ant Дата: Вторник, 22.02.2011, 11:15 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

 
Ответить
СообщениеОтветил тута:
http://www.planetaexcel.ru/forum.p....orum=49

Автор - GIG_ant
Дата добавления - 22.02.2011 в 11:15
Serge_007 Дата: Вторник, 22.02.2011, 12:07 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
К сообщению приложен файл: 3374631.gif (27.0 Kb)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение

Автор - Serge_007
Дата добавления - 22.02.2011 в 12:07
Serge_007 Дата: Вторник, 22.02.2011, 13:07 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Вот рабочий код (вставляем в модуль Эта книга Personal):
[vba]
Код
Private WithEvents App As Application

Private Sub Workbook_Open()
Set App = Application
End Sub
Private Sub App_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Application.EnableEvents = False
Target.InGridDropZones = True
Application.EnableEvents = True
End Sub
[/vba]

Спасибо The_Prist.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеВот рабочий код (вставляем в модуль Эта книга Personal):
[vba]
Код
Private WithEvents App As Application

Private Sub Workbook_Open()
Set App = Application
End Sub
Private Sub App_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Application.EnableEvents = False
Target.InGridDropZones = True
Application.EnableEvents = True
End Sub
[/vba]

Спасибо The_Prist.

Автор - Serge_007
Дата добавления - 22.02.2011 в 13:07
Гость Дата: Пятница, 15.04.2011, 00:50 | Сообщение № 18
Группа: Гости
к сожалению недоработан макрос - очень похожа на сводную из 2003 офиса, но поля внутри сводной просто перетащить и поменять местами нельзя sad
 
Ответить
Сообщениек сожалению недоработан макрос - очень похожа на сводную из 2003 офиса, но поля внутри сводной просто перетащить и поменять местами нельзя sad

Автор - Гость
Дата добавления - 15.04.2011 в 00:50
Serge_007 Дата: Пятница, 15.04.2011, 01:00 | Сообщение № 19
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Да, работает не всегда и не со всеми файлами.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеДа, работает не всегда и не со всеми файлами.

Автор - Serge_007
Дата добавления - 15.04.2011 в 01:00
Serge_007 Дата: Суббота, 22.10.2011, 10:14 | Сообщение № 20
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Как мы и говорили вчера, поднимаю тему.
Хочется всё-таки решения, которое работает всегда...


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеКак мы и говорили вчера, поднимаю тему.
Хочется всё-таки решения, которое работает всегда...

Автор - Serge_007
Дата добавления - 22.10.2011 в 10:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Классический макет сводной таблицы. VBA. (Формулы)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!