Как создать сводный кэш с использованием определенного диапазона в качестве источника данных без ошибки несоответствия типов - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь создать довольно простую сводную таблицу, но у меня проблемы с созданием сводной кэш-памяти. И источник данных и тип данных, кажется, правильно, но я получаю ошибку. Я искал похожие проблемы, но ни один из подтвержденных ответов не помог мне.

Sub Macro1()
'
' Macro1 Macro
'
    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

'On Error Resume Next
'Application.DisplayAlerts = False
    Worksheets("Regions").Delete
    Sheets.Add Before:=ActiveSheet
    ActiveSheet.Name = "Regions"
    Application.DisplayAlerts = True
    Set PSheet = Worksheets("Regions")
    Set DSheet = Worksheets("Sheet1")

'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)

'Set Pivot table Cache

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

    Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(1, 1), TableName:="SalesPivotTable")

    'Insert Row Fields
    With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("ID")
    .Orientation = xlRowField
    .Position = 1
    End With

    'Insert Data Field
    With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("Pkt avg")
    .Orientation = xlDataField
    .Position = 1
    .Function = xlAverage
    .NumberFormat = "0"
    .Name = "pkt avg"
    End With

    With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("Number of apt")
    .Orientation = xlDataField
    .Position = 2
    .Function = xlCount
    .NumberFormat = "0"
    .Name = "Apt num"
    End With

End Sub

Я получаю ошибку несоответствия типов здесь Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange).CreatePivotTable(TableDestination:=PSheet.Cells(2, 2),TableName:="SalesPivotTable")

1 Ответ

0 голосов
/ 09 марта 2020

Попробуйте

Sub Macro1()
'
' Macro1 Macro
'
    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

'On Error Resume Next
Application.DisplayAlerts = False
    Worksheets("Regions").Delete
    Sheets.Add Before:=ActiveSheet
    ActiveSheet.Name = "Regions"
    Application.DisplayAlerts = True
    Set PSheet = Worksheets("Regions")
    Set DSheet = Worksheets("Sheet1")

'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)

'Set Pivot table Cache

    Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange)
    Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(1, 1), TableName:="SalesPivotTable")

    'Insert Row Fields
    With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("ID")
    .Orientation = xlRowField
    .Position = 1
    End With

    'Insert Data Field
    With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("Pkt avg")
    .Orientation = xlDataField
    .Position = 1
    .Function = xlAverage
    .NumberFormat = "0"
    '.Name = "Pkt avg"
    .Caption = "Pkt Avgs" '~~> can't use same name with field name
    End With

    With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("Number of apt")
    .Orientation = xlDataField
    .Position = 2
    .Function = xlCount
    .NumberFormat = "0"
    '.Name = "Apt num"
    .Caption = "Apt num"
    End With
Application.DisplayAlerts = False
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...