2013-09-02 7 views
3

Я использую следующий код:Pivot Table-VBA Ошибка

Sub MakeAPivotTable() 

    Dim pt As PivotTable 
    Dim cacheOfpt1 As PivotCache 'This is the Source Data 
    Dim pf As PivotField 
    Dim pi As PivotItem 
    Dim LastCol As Long 
    Dim LastRow As Long 
    Dim PRange As Range 


    LastCol = Sheets("Sheet2").Range("A1").SpecialCells(xlCellTypeLastCell).Column 
    LastRow = Sheets("Sheet2").Range("A1").SpecialCells(xlCellTypeLastCell).Row 
    Set PRange1 = Sheets("Sheet2").Cells(1, 1).Resize(LastRow, LastCol) 

    On Error GoTo err_add_Y_next_row 

    Sheets("Sheet3").Select 
    ActiveSheet.PivotTables("PivotTable1").TableRange2.Clear 'Delete any Pivot Table 

    'set the cache of PT 
    Sheets("Sheet2").Select 
    Set cacheOfpt1 = ActiveWorkbook.PivotCaches.Create(xlDatabase, PRange1) 

    'create the pt 
    Sheets("Sheet3").Select 
    Set pt = ActiveSheet.PivotTables.Add(cacheOfpt1, Range("a1"), "PivotTable1") 


    'put the Fields in 

    With pt 
    'add the Fields 
    .PivotFields("CAMPAIGN").Orientation = xlRowField 
    '.PivotFields("TAG1").Orientation = xlRowField 
    '.PivotFields("TAG2").Orientation = xlRowField 
    '.PivotFields("TAG3").Orientation = xlRowField 
    .PivotFields("CIRN").Orientation = xlColumnField 
    .PivotFields("RUN").Orientation = xlPageField 'Column Filter 
    .PivotFields("TVSN").Orientation = xlDataField 'Value Field 

    'set the number format 
    .DataBodyRange.NumberFormat = "#,##0.00" 


    'go to classic View 
    .RowAxisLayout xlTabularRow 
    End With 

err_add_Y_next_row: 
MsgBox Err.Number & Err.Description, _ 
    vbExclamation, "VBAtools.pl" 

End Sub 

Но когда я бегу код, я получаю ошибку «Имя поля сводной таблицы не действует Для создания. вы должны использовать данные, которые организованы как список с помеченными столбцами. Если вы меняете имя поля сводной таблицы, вы должны ввести новое имя для этого поля. "

Этот код работал нормально. Но внезапно я начал получать эту ошибку.

Может кто-нибудь, пожалуйста, помогите мне найти причину.

спасибо.

+0

Вы проверили имя сводной таблицы? :-) – Makah

+0

В какой строке происходит ошибка? –

+0

@Makah: Да, я проверил имя сводной таблицы. – Beta

ответ

2

Попробуйте использовать ListObject («Таблица») вместо Range для источника данных; эти всегда являются допустимым источником данных для сводной таблицы - см. this SO question - у ОП не было такой же проблемы, как и у вас, но я считаю, что такое же решение применяется.

Причина, по которой таблицы всегда являются достоверными источниками, потому что они всегда имеют допустимые заголовки, и у них всегда есть как минимум 1 ряд данных.

После того, как вы превратили свой диапазон в таблицу (и назвал его, скажем, «Table1»), вы можете использовать его как это:

Set cacheOfPt1 = ActiveWorkbook.PivotCaches.Create(xlDatabase, "Table1") 

с кэшем, который, используя действительный источник данных, там не должно быть проблемой, делая именно то, что вы делаете, чтобы Set pt:

Set pt = ActiveSheet.PivotTables.Add(cacheOfpt1, Range("a1"), "PivotTable1") 

Кроме того, с этой установкой вы можете пересмотреть необходимость полностью восстановить сводную таблицу с нуля каждый раз; вы можете просто добавить/удалить данные в/из «Таблица1», а затем обновить свою сводную таблицу - она ​​будет автоматически обновляться, чтобы отразить содержимое «Таблица 1».

+0

Хотя это отличное предложение, это не конкретный ответ на этот конкретный вопрос. Это будет хороший комментарий. –

+0

Спасибо retailcoder! Я проверю ваше предложение. Я видел эту проблему, с которой сталкиваются многие. Но решение не было применимо ко мне. – Beta

+0

Спасибо большое retailcoder! Ваше предложение сработало. :) – Beta

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