2013-12-16 7 views
1

Я написал этот код в VBA для создания сводной таблицы (конвертировано его из Macro, Acctually ...), и он не работаетСоздание сводной таблицы в VBA в Excel 2013

Dim wsTarget As Worksheet 
Dim rngSource As Range 
Dim pc As PivotCache 
Dim pt As PivotTable 
Dim field As PivotField 

Application.ScreenUpdating = False 

Set rngSource = Summary.Range("A1").CurrentRegion 
Set wsTarget = PivotTable 

wsTarget.Select 
For Each pt In wsTarget.PivotTables 
    pt.Delete 
Next pt 

Set pc = ThisWorkbook.PivotCaches.Create(xlDatabase, rngSource, xlPivotTableVersion15) 
Set pt = pc.CreatePivotTable(wsTarget.Range("A3"), "PivotTable1", , xlPivotTableVersion15) 

Set field = wsTarget.PivotTables("PivotTable1").PivotFields("A") 
field.Orientation = xlColumnField 
field.Position = 1 
field.LayoutBlankLine = True 

Set field = wsTarget.PivotTables("PivotTable1").PivotFields("B") 
field.Orientation = xlRowField 
field.Position = 1 

Set field = wsTarget.PivotTables("PivotTable1").PivotFields("TOTAL") 
Set field = wsTarget.PivotTables("PivotTable1").AddDataField(field, "Sum of TOTAL", xlSum) 
field.NumberFormat = "_ $ * #,##0.00_ " 

Application.ScreenUpdating = True 

код продолжает сбой в строке «Set pc», и я не могу понять, почему ... пробовал поиск по Google, и все результаты были идентичны моему коду ... Важная информация - я работаю с excel 2013, может быть, из-за этого ... Поблагодарите любую помощь, которую я могу получить - Спасибо!

ответ

0

попробовать this..i думаю, что вы непосредственно отсылающее имя листа ..

Set rngSource = Sheets("Summary").Range("A1").CurrentRegion 
Set wsTarget = sheets("PivotTable") 
+0

Я сделал это, но он все еще не работает .. похоже на rngSource не может получить значение всей таблицы .. есть другой способ, чтобы вставить диапазон таблицы в переменная? спасибо !! – Bramat

+0

Загрузите приложение где-нибудь. пришлите мне ссылку .. я буду работать над этим –

0

Попробуйте это:

Dim lrow As Long 
Dim lcol As Long 
Dim rngSource As Range 

lrow = ActiveSheet.Cells(Application.Rows.Count, 1).End(xlUp).Row 
lcol = ActiveSheet.Cells(1, Application.Columns.Count).End(xlToLeft).Column 

Set rngSource = ActiveSheet.Cells(1, 1).Resize(lrow, lcol) 
Смежные вопросы