Сводный стол VBA - PullRequest
       0

Сводный стол VBA

0 голосов
/ 31 января 2020

Я столкнулся с одной проблемой, которую не могу решить. Я собираюсь создать сводную таблицу с помощью VBA, но по некоторым причинам код не работает. Вот мой исходный код VBA. Когда я запускаю код, сводная таблица не будет создана. Есть предположения или ошибки? Помогите. Заранее спасибо

Sub Pivot()

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("PivotTable").Delete
Sheets.Add Before:=ActiveSheet
ActiveSheet.Name = "PivotTable"
Application.DisplayAlerts = True
Set PSheet = Worksheets("PivotTable")
Set DSheet = Worksheets("BOQ")


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 PCache = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:=PRange). _
CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
TableName:="PivotTable")

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




 Sheets("PivotTable").Select
 Sheets("PivotTable").Select
 With ActiveSheet.PivotTables("PivotTable").PivotFields("Group")
    .Orientation = xlRowField
    .Position = 1
 End With
 With ActiveSheet.PivotTables("PivotTable").PivotFields("Subgroup")
    .Orientation = xlRowField
    .Position = 2
End With
 With ActiveSheet.PivotTables("PivotTable").PivotFields("Size")
    .Orientation = xlRowField
    .Position = 3
End With
ActiveSheet.PivotTables("PivotTable").AddDataField ActiveSheet.PivotTables( _
    "PivotTable").PivotFields("Quantity"), "Quantity ", xlSum
ActiveSheet.PivotTables("PivotTable").AddDataField ActiveSheet.PivotTables( _
    "PivotTable").PivotFields("Total manhours"), "Total manhours ", _
    xlSum
 ActiveSheet.PivotTables("PivotTable").AddDataField ActiveSheet.PivotTables( _
    "PivotTable").PivotFields("Total machinery  hours"), _
    "Total machinery  hours ", xlSum
 ActiveSheet.PivotTables("PivotTable").AddDataField ActiveSheet.PivotTables( _
    "PivotTable").PivotFields("Total material cost/KZT"), _
    "Total material cost/KZT ", xlSum
 ActiveSheet.PivotTables("PivotTable").AddDataField ActiveSheet.PivotTables( _
    "PivotTable").PivotFields("Total workprice"), "Total workprice ", _
    xlSum
 ActiveSheet.PivotTables("PivotTable").RowAxisLayout xlTabularRow


End Sub

1 Ответ

0 голосов
/ 31 января 2020

Здесь вы звоните CreatePivotTable дважды:

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

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

Сделайте это вместо:

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

Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(1, 1), _
                                     TableName:="PivotTable")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...