2014-12-02 6 views
0

У меня проблема с Excel Pivot, с которой я изо всех сил пытаюсь решить часами. У меня есть код, ниже которого я получил от Record Macro. Предполагается создать сводную таблицу и добавить «Тип записи» в качестве первого столбца, а затем добавить еще один столбец для общих записей для каждого типа записи, но он удалит 1-й столбец. Я пытаюсь сделать это http://youtu.be/UseY0lEPu80, но когда я использую VBA я получаю эту проблему http://youtu.be/eOxXX336gP0Excel VBA Создание Pivot не полностью работает

S1LastRow = 569 
S1LastColumn = 17 
Sheet2.UsedRange.Delete 
Application.Goto Sheet2.Range("A1"), True 

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= "Main!R1C1:R" & S1LastRow & "C" & S1LastColumn, Version:=xlPivotTableVersion12).CreatePivotTable TableDestination:="Graph!R1C1", TableName:="Summary", DefaultVersion :=xlPivotTableVersion12 

With ActiveSheet.PivotTables("Summary").PivotFields("Record Type") 
    .Orientation = xlRowField 
    .Position = 1 
End With 

ActiveSheet.PivotTables("Summary").AddDataField ActiveSheet.PivotTables("Summary").PivotFields("Record Type"), "Count of Record Type", xlCount 

With ActiveSheet.PivotTables("Summary") 
    .ColumnGrand = False 
    .RowGrand = False 
End With 
+0

Добавить поле в поле данных, а затем в поле строки и у вас не будет этой проблемы. – Rory

+0

Извините, Рой, но не могли бы вы объяснить больше или, может быть, пример перестройки моего кода выше? Я думал, что я уже сделал то, что вы предложили. Проблема в том, что .AddDataField удаляет предыдущий столбец: s – Jay

ответ

1

сделать это следующим образом:

Dim PC     As Excel.PivotCache 
Dim PT     As Excel.PivotTable 

S1LastRow = 569 
S1LastColumn = 17 
Sheet2.UsedRange.Delete 
Application.Goto Sheet2.Range("A1"), True 

Set PC = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ 
            SourceData:="Main!R1C1:R" & S1LastRow & "C" & S1LastColumn, _ 
            Version:=xlPivotTableVersion12) 
Set PT = PC.CreatePivotTable(TableDestination:="Graph!R1C1", TableName:="Summary", _ 
          DefaultVersion:=xlPivotTableVersion12) 

With PT 

    ' add the data field first if you want to use the same field as a row/column field too 
    .AddDataField .PivotFields("Record Type"), "Count of Record Type", xlCount 

    With .PivotFields("Record Type") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 

    .ColumnGrand = False 
    .RowGrand = False 
End With 
+0

А я вижу, поэтому проблема заключалась в том, что я использовал тот же столбец, что и Pivotfield и Datafield, что редко случается кстати. Можно ли сказать, что мы должны практиковать добавление полей данных перед Pivotfield, чтобы избежать проблем? Я пробовал свой код, и он работает, но я вернулся к моему коду выше и изменил его, так что он сначала «.AddDataField» перед «.PivotFields», и теперь он тоже работает. – Jay

+0

Да. Когда вы добавляете его как поле Row/Column, имя не изменяется, поэтому, когда вы добавляете его как поле данных, оно перемещает существующее поле. Когда вы добавляете его как поле данных, имя должно быть другим, поэтому последующий код работает, чтобы добавить новую копию поля. – Rory

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