VBA用于创建数据透视表

时间:2019-09-04 18:36:39

标签: excel vba pivot-table

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

但是,每次尝试运行它时,在 Define Pivot Cache 部分上都会出现错误:“ 运行时错误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))

1 个答案:

答案 0 :(得分:1)

更改此:

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

收件人:

Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange)

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

在您的原始代码中,CreatePivotTable返回一个PivotTable,而不是PivotCache,因此给您“类型不匹配”错误

编辑:对此进行了测试,对我来说效果很好

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