2016-08-04 3 views
0

Я играю с этим маленьким фрагментом кода.Как создать сводную таблицу и назвать ее с помощью VBA?

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    "Personnel&Facilities Detail!R3C1:R105279C21", Version:=xlPivotTableVersion14 _ 
    ).CreatePivotTable TableDestination:="Corporate Communications!R1C1", _ 
    TableName:="PivotTable9", DefaultVersion:=xlPivotTableVersion14 

Я пытаюсь Переберите диапазон ячеек и создавать кучу шарниров на основе некоторых наборы данных, которые у меня есть. У меня нормально работает цикл, и я записал макрос, который должен делать то, что я хочу. То, что я не могу понять, - это соглашение об именах сводных таблиц. Кажется, он увеличивается на 1 каждый раз, когда я включаю Macro Recorder и просматриваю последовательность событий. Я уверен, что проблема здесь:

TableName: = «PivotTable9»

Я пытался очистить кэш из сводных таблиц, чтобы сбросить имя таблицы, но это не сработало.

Любая идея, что здесь не так?

+0

Похоже, вы создаете несколько сводных таблиц на основе одного и того же ключевого кеша. Проблема для меня выглядит так, будто вы пытаетесь создать каждую сводную таблицу поверх ранее созданной таблицы на том же листе в той же ячейке. Попробуйте переместить 'TableDestination' с каждой итерацией цикла (возможно, самым простым является новый рабочий лист для каждого PT). Excel автоматически увеличит ваши имена сводной таблицы, если ваше 'TableName' уже существует. Таким образом, вы также должны создать уникальное имя для каждого PT на каждой итерации вашего цикла. – PeterT

+0

Возможно, это было то, что вы сказали. Можете ли вы опубликовать несколько примеров кода? Я пробовал кучу вещей, и ничто не работает для меня. Я могу сделать это на другой машине, используя Excel 2003. Я не знаю, почему Excel 2010 не может ее обработать. – ryguy7272

ответ

1

Процесс, который вы ищете, состоит в том, чтобы установить каждую часть PivotTable отдельно. Это значительно облегчает отслеживание проблем и ошибок по мере их возникновения. В приведенном ниже примере кода показано, как настроить общий PivotCache, а затем создать число PivotTables из этого единого общего кеша.

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

Option Explicit 

Sub test() 
    Dim dataArea As Range 
    'Set dataArea = ThisWorkbook.Sheets("Personnel&Facilities Detail").Range("A3:U105279") 
    Set dataArea = ThisWorkbook.Sheets("RawData").Range("A1:L250") 
    CreateAllPivots dataArea, 5 
End Sub 

Sub CreateAllPivots(ByRef dataArea As Range, ByVal numPivots As Integer) 
    '--- given an input range and the number of Pivot Tables to create, 
    ' this sub creates a single, common Pivot Cache and then new 
    ' Pivot Tables (each on its own worksheet) 

    '--- perform any parameter checks, such as numPivots > 0 

    '--- create the common pivot cache for all tables 
    Dim ptWB As Workbook 
    Dim ptCache As PivotCache 
    Set ptWB = ThisWorkbook 
    Set ptCache = ptWB.PivotCaches.Create(SourceType:=xlDatabase, _ 
              SourceData:=dataArea, _ 
              Version:=xlPivotTableVersion14) 

    '--- define the base name of the PT worksheets 
    Dim ptName As String 
    Dim ptSheetName As String 
    ptName = "CorpCommPT" 
    ptSheetName = "Corp Communications - " 

    '--- set up all the pivot tables 
    Dim i As Integer 
    Dim ptSheet As Worksheet 
    Dim newPTName As String 
    Dim thisPivot As PivotTable 
    For i = 1 To numPivots 
     Set ptSheet = ptWB.Sheets.Add 
     ptSheet.Name = ptSheetName & i 
     newPTName = ptName & i 
     Set thisPivot = ptCache.CreatePivotTable(TableDestination:=ptSheet.Range("A1"), _ 
               TableName:=newPTName, _ 
               DefaultVersion:=xlPivotTableVersion14) 
     '--- potentially set up the pivot fields for the new table here 
    Next i 

End Sub 
+0

Это прекрасная вещь! Благодарю. Кроме того, я нашел эту ссылку полезной. http://analysistabs.com/excel-vba/pivot-tables-examples/ – ryguy7272

Смежные вопросы