Excel VBA用于创建数据透视表

Excel VBA用于创建数据透视表,excel,vba,pivot-table,Excel,Vba,Pivot Table,我正在尝试使用VBA插入透视表 但是,每次尝试运行它时,我都会收到一个错误:“运行时错误13:定义数据透视缓存部分的类型不匹配” 我尝试过更改变量名,也尝试过不使用其中的一些,但仍然会出现相同的错误。我错过什么了吗 Sub PivotTableAdd() 'Declare Variables Dim PSheet As Worksheet Dim DSheet As Worksheet Dim PCache As PivotCache Dim PTabl

我正在尝试使用VBA插入透视表

但是,每次尝试运行它时,我都会收到一个错误:“运行时错误13:定义数据透视缓存部分的类型不匹配”

我尝试过更改变量名,也尝试过不使用其中的一些,但仍然会出现相同的错误。我错过什么了吗

Sub PivotTableAdd()

    'Declare Variables
    Dim PSheet As Worksheet
    Dim DSheet As Worksheet
    Dim PCache As PivotCache
    Dim PTable As PivotTable
    Dim PRange As Range
    Dim LastRow As Long
    Dim LastCol As Long

    'Insert a New Blank Worksheet
    'On Error Resume Next
    Application.DisplayAlerts = False
    'Worksheets("Pivot").Delete
    Sheets.Add Before:=ActiveSheet
    ActiveSheet.Name = "Pivot"
    Application.DisplayAlerts = True
    Set PSheet = Worksheets("Pivot")
    Set DSheet = Worksheets("Report")

    'Define Data Range
    LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
    LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
    Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol)

    'Define Pivot Cache
    Set PCache = ActiveWorkbook.PivotCaches.Create _
    (SourceType:=xlDatabase, SourceData:=PRange). _
    CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
    TableName:="PivotTable")

    'Insert Blank Pivot Table
    Set PTable = PCache.CreatePivotTable _
    (TableDestination:=PSheet.Cells(1, 1), TableName:="PivotTable")

End Sub
编辑: 我改变了这一行,让它开始工作:

Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange.Address(True, True, xlR1C1, True))
更改此项:

Set PCache = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:=PRange). _
CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
TableName:="PivotTable")
致:

在原始代码中,
CreatePivotTable
返回一个
PivotTable
,而不是
pivottcache
,因此会出现“类型不匹配”错误

编辑:测试了这个,对我来说效果很好

Sub PivotTableAdd()

        'Declare Variables
        Dim PSheet As Worksheet
        Dim DSheet As Worksheet
        Dim PCache As PivotCache
        Dim PTable As PivotTable
        Dim PRange As Range
        Dim LastRow As Long
        Dim LastCol As Long

        'Insert a New Blank Worksheet
        'On Error Resume Next
        Application.DisplayAlerts = False
        'Worksheets("Pivot").Delete
        Sheets.Add Before:=ActiveSheet
        ActiveSheet.Name = "Pivot"
        Application.DisplayAlerts = True
        Set PSheet = Worksheets("Pivot")
        Set DSheet = Worksheets("Report")

        'Define Data Range
        LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
        LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
        Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol)

        'Define Pivot Cache
       Set PCache = ActiveWorkbook.PivotCaches.Create( _
                  SourceType:=xlDatabase, SourceData:=PRange)

       Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
                               TableName:="PivotTable")
End Sub

蒂姆,我做了上面提到的改变,但我仍然得到同样的错误。有什么想法吗?在设定的PCache线上。
Sub PivotTableAdd()

        'Declare Variables
        Dim PSheet As Worksheet
        Dim DSheet As Worksheet
        Dim PCache As PivotCache
        Dim PTable As PivotTable
        Dim PRange As Range
        Dim LastRow As Long
        Dim LastCol As Long

        'Insert a New Blank Worksheet
        'On Error Resume Next
        Application.DisplayAlerts = False
        'Worksheets("Pivot").Delete
        Sheets.Add Before:=ActiveSheet
        ActiveSheet.Name = "Pivot"
        Application.DisplayAlerts = True
        Set PSheet = Worksheets("Pivot")
        Set DSheet = Worksheets("Report")

        'Define Data Range
        LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
        LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
        Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol)

        'Define Pivot Cache
       Set PCache = ActiveWorkbook.PivotCaches.Create( _
                  SourceType:=xlDatabase, SourceData:=PRange)

       Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
                               TableName:="PivotTable")
End Sub