2017-04-12 110 views
1

我在下面有此代码,但Set PT_Cache行正在引发类型不匹配错误。使用VBA错误创建数据透视表

任何人都知道为什么?

Sub Create_Pivot_Table() 
Dim wsData As Worksheet, wsPT As Worksheet 
Dim PT_Cache As PivotCache 
Dim PT As PivotTable 
Dim LastRow As Long 

With ThisWorkbook 
Set wsData = .Worksheets("Data") 
Set wsPT = .Worksheets("Pivot Table") 
End With 

LastRow = wsData.Cells(Rows.Count, 1).End(xlUp).Row 

Set PT_Cache = ThisWorkbook.PivotCaches.Create(xlDatabase, wsData.Range("A1:O" & LastRow)) 

Set PT = PT_Cache.CreatePivotTable(wsPT.Range("D5"), "Pivot_Table_Test") 

Set PT = Nothing 
Set PT_Cache = Nothing 
Set wsData = Nothing 
Set wsPT = Nothing 
Exit Sub 

End Sub 
+0

是什么'LastRow'的价值? 'LastRow'也应该是'LastRow = wsData.Cells(wsData.Rows.Count,1).End(xlUp).Row' –

+0

我修正了这部分,这不是问题,“set PT_Cache”仍然出错... –

+0

您是否阅读过我的答案并测试了下面的代码? –

回答

1

尝试下面的代码,我添加了2个选项,设置PivotCache,尝试一个和评论其他(或相反),看看哪一个适合你(当我测试它都努力我虚拟数据)

代码

Option Explicit 

Sub Create_Pivot_Table() 

Dim wsData As Worksheet, wsPT As Worksheet 
Dim PT_Cache As PivotCache 
Dim PT   As PivotTable 
Dim PRng  As Range 
Dim LastRow  As Long 

With ThisWorkbook 
    Set wsData = .Worksheets("Data") 
    Set wsPT = .Worksheets("Pivot Table") 
End With 

LastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row 
MsgBox LastRow ' <-- confirm value 

Set PRng = wsData.Range("A1:O" & LastRow) 

' option 1: Set the Pivot Cache 
Set PT_Cache = ThisWorkbook.PivotCaches.Create(xlDatabase, PRng) 

' option 2: Set the Pivot Cache 
Set PT_Cache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRng.Address(True, True, xlR1C1, True)) 

' set the Pivot Table 
Set PT = wsPT.PivotTables.Add(PivotCache:=PT_Cache, TableDestination:=wsPT.Range("D5"), TableName:="Pivot_Table_Test") 

Set PT = Nothing 
Set PT_Cache = Nothing 
Set wsData = Nothing 
Set wsPT = Nothing 
Exit Sub 

End Sub