Нет, я думал, что надо в макросе предусмотреть универсальный вариант, без упоминания имени таблиц... Ну да в другом месте уже решили вопрос, как я понял
Нет, я думал, что надо в макросе предусмотреть универсальный вариант, без упоминания имени таблиц... Ну да в другом месте уже решили вопрос, как я понял Hugo
Просто для интереса проверил - работает. Вот это в стандартный модуль (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
Просто для интереса проверил - работает. Вот это в стандартный модуль (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/21136112nilem
Яндекс.Деньги 4100159601573
Сообщение отредактировал nilem - Понедельник, 03.01.2011, 19:44
Сводная должна появляться там где я укажу, а не на новом листе. Получится так?
Ну можно в этот же код добавить инпутбоксы, типа "Щелкните в таблице с данными" и "Укажите место для сводной", можно еще "Задайте имя сводной". Но без кнопочки, имхо, никак.
Quote (Serge_007)
Сводная должна появляться там где я укажу, а не на новом листе. Получится так?
Ну можно в этот же код добавить инпутбоксы, типа "Щелкните в таблице с данными" и "Укажите место для сводной", можно еще "Задайте имя сводной". Но без кнопочки, имхо, никак.nilem
Ладно, попробую объяснить по другому. Начиная с Excel 2007 Мастер сводных таблиц по умолчанию создает новую сводную не в классическом виде, т.е. перетаскивание полей мышкой запрещено. Приходится каждый раз выполнять надоевшую до одури одну и ту же комбинацию: ПКМ по сводной - Параметры сводной таблицы - Вывод - ставлю галку на Классический макет сводной таблицы. Вот и возникла идея исправить мелкомягкий косяк
Я рассуждал так: Раз уж есть строка кода, которая отвечает за снятие этой галки (InGridDropZones = True), значит можно запихать её в Personal и запускать при создании любой новой сводной. Можно?
Quote (nilem)
Но без кнопочки, имхо, никак.
Ладно, попробую объяснить по другому. Начиная с Excel 2007 Мастер сводных таблиц по умолчанию создает новую сводную не в классическом виде, т.е. перетаскивание полей мышкой запрещено. Приходится каждый раз выполнять надоевшую до одури одну и ту же комбинацию: ПКМ по сводной - Параметры сводной таблицы - Вывод - ставлю галку на Классический макет сводной таблицы. Вот и возникла идея исправить мелкомягкий косяк
Я рассуждал так: Раз уж есть строка кода, которая отвечает за снятие этой галки (InGridDropZones = True), значит можно запихать её в Personal и запускать при создании любой новой сводной. Можно?
Ответ вроде получил здесь. Вот код от слэн, который надо вставить в Модуль Класса 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] Если ещё кто смог бы объяснить как это работает...
Ответ вроде получил здесь. Вот код от слэн, который надо вставить в Модуль Класса 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
Ни хрена оно не работает... Совпадения были, файлы изначально созданные в 2003 попадались, это я только сейчас понял... Знает кто-нибудь как эту галку автоматом поставить или нет?..
Ни хрена оно не работает... Совпадения были, файлы изначально созданные в 2003 попадались, это я только сейчас понял... Знает кто-нибудь как эту галку автоматом поставить или нет?..Serge_007
Вот рабочий код (вставляем в модуль Эта книга 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.
Вот рабочий код (вставляем в модуль Эта книга 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