2013-12-06 4 views
1

Я записал макрос, чтобы создать сводную таблицу и последующую диаграмму в VBA. Он работает как шарм, совсем не так, как мне это нужно. Проблема в том, что я хочу иметь возможность запускать код и создать таблицу на листе, который еще не существует. В основном я буду запускать это с помощью кнопки в меню, и она должна создать таблицу и диаграмму на новой странице. Без дальнейших прощайте:VBA Pivot Table On New Sheet

Sub Macro13() 

' Macro13 Macro 



    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     "Main Budget Sheet!R2C1:R88C10", Version:=xlPivotTableVersion14). _ 
     CreatePivotTable TableDestination:="Sheet21!R1C1", TableName:= _ 
     "PivotTable12", DefaultVersion:=xlPivotTableVersion14 
    Sheets("Sheet21").Select 
    Cells(1, 1).Select 
    With ActiveSheet.PivotTables("PivotTable12").PivotFields("Category") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    ActiveSheet.PivotTables("PivotTable12").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable12").PivotFields("Labor"), "Sum of Labor", xlSum 
    ActiveSheet.PivotTables("PivotTable12").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable12").PivotFields("Material"), "Sum of Material", xlSum 
    ActiveSheet.Shapes.AddChart.Select 
End Sub 

Если я помещал это в простой английском языке, я предположил бы, что это значит ... Выбрать данные в основном бюджете листе затем создать сводную таблицу на лист 21 имени таблицы 12 шарнирных ... Затем выберите лист 21 и выберите поля для сводной таблицы ... Наконец, добавьте диаграмму из этих данных ...

Я думаю, что мне нужно просто определить общие имена для каждой из этих вещей (помимо источника данные).

Кроме того, в настоящее время он будет работать только один раз и только в том случае, если этот лист уже существует, по-видимому, потому, что он не может сделать сводную таблицу с одинаковым именем, поэтому, если она может неоднократно просто создавать одну и ту же таблицу на разных листах, я мог бы умереть счастливым.

Как вы можете видеть, я пробовал это достаточно, чтобы создать 21 лист: /, поэтому усилие есть, но, поскольку определение состояния безумия «Эйнштейна» говорит: «Безумие пытается одно и то же и ожидает другого результата». В настоящее время у меня заканчиваются новые вещи, чтобы попробовать.

+0

Вы пробовали 'Sheets.Add' в самом начале? – pnuts

+0

Я действительно попробовал это, и пока он создал новый лист, таблица не попадает в него. –

ответ

3

Добавить новый лист затем использовать этот лист, чтобы добавить новую точку опоры тоже следующим образом:

Sub AddPivotOnNewSheet() 
Dim wsNew As Worksheet 

Set wsNew = Sheets.Add 

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     "Main Budget Sheet!R2C1:R88C10", Version:=xlPivotTableVersion14). _ 
     CreatePivotTable TableDestination:=wsNew.Name & "!R1C1", TableName:= _ 
     "PivotTableName", DefaultVersion:=xlPivotTableVersion14 

    With ActiveSheet.PivotTables("PivotTableName").PivotFields("Category") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    ActiveSheet.PivotTables("PivotTableName").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTableName").PivotFields("Labor"), "Sum of Labor", xlSum 
    ActiveSheet.PivotTables("PivotTableName").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTableName").PivotFields("Material"), "Sum of Material", xlSum 

    wsNew.Shapes.AddChart.Select 
End Sub 
+0

О, боже мой, я потратил буквально 4 часа, пытаясь разобраться в этом, и ты приходишь и решаешь это именно так. Спасибо большое. Ты удивительный. Последнее, извините, имя «PivotTableName» заключается в том, что общая форма, чтобы не требовать определенного имени, или вы могли бы что-то там положить? –

+0

@NicholasBrandon Вы можете использовать все, что хотите, чтобы имя сводной таблицы было – user2140261

1
Sub pivotnewsheet() 

Dim ws As Worksheet 
Dim pc As PivotCache 
Dim pt As PivotTable 

'Creating Pivot cache 
On Error Resume Next 
Set pc = ActiveWorkbook.PivotCaches.Create(xlDatabase, Cells(5, 1).CurrentRegion) 'select first cells of your data range, in my case its start with Row5 column1 so i put cells(5,1) 

'Adding new worksheet 

Set ws = Worksheets.Add 
ws.Name = "Summary" 

'Creating Pivot table 
Set pt = ActiveSheet.PivotTables.Add(PivotCache:=pc, Tabledestination:=Range("A3")) 
' it will create pivot table on sheet named summary at range A3 

pt.Name = "PivotTable" 

'Setting Fields 
With pt 
with .PivotFields("DEPT_NAME") 
.Orientation = xlRowField 
.Position = 1 
End With 

'set column field 
With .PivotFields("QTY") 
.Orientation = xlDataField 
.Function = xlSum 
.Position = 1 
End With 
With .PivotFields("TOTAL_RETAIL_VALUE") 
.Orientation = xlDataField 
.Function = xlAverage 
.Position = 2 
.NumberFormat = "0.00" 'format for two decimals 
End With 
With .PivotFields("TOTAL_LANDED_COST") 
.Orientation = xlDataField 
.Function = xlAverage 
.NumberFormat = "0.00" 
.Position = 3 
End With 
'select classic view pivot 
With ActiveSheet.PivotTables("PivotTable") 
.InGridDropZones = True 
.RowAxisLayout xlTabularRow 
End With 

End With 

End Sub 
+0

. Успешно работает. Наслаждайтесь парнями :) –