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

Sub AutoPivot7()

Dim ws7 As Worksheet
Dim pc7 As PivotCache
Dim pt7 As PivotTable
Dim ct7 As Integer
Set ws7 = Sheets("Pivot_Reasons")


Set pc7 = ActiveWorkbook.PivotCaches.Create(xlDatabase, "'Reasons for Delay'!R1C1:R1048576C2")

Set pt7 = pc7.CreatePivotTable(ws7.Range("B3"))

pt7.AddDataField pt7.PivotFields("Sum of Reasons for Delay"), "Sum of Reasons for Delay", xlSum

With pt7

With .PivotFields("Reasons for Delay")
.Orientation = xlRowField
.Position = 1
.AutoSort xlDescending, "Sum of Reasons for Delay"

End With

With .PivotFields("Sum of Reasons for Delay")
.Calculation = xlPercentOfTotal
End With
End With
End Sub

Ошибка возникает в строке

pt7.AddDataField pt7.PivotFields («Сумма причин задержки»), «Сумма причин задержки», xlSum

Если я удалю это и запустил свой код, я не получаю сообщение об ошибке. Я также прикрепил макрос записи, который я упомянул

Sub Macro7()
'
' Macro7 Macro
'

'
    ActiveCell.Offset(-21, -1).Range("Table3[#All]").Select
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Table3", Version:=xlPivotTableVersion15).CreatePivotTable TableDestination _
        :="Sheet1!R3C1", TableName:="PivotTable44", DefaultVersion:= _
        xlPivotTableVersion15
    Sheets("Sheet1").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("PivotTable44").PivotFields("Reasons for Delay")
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveSheet.PivotTables("PivotTable44").AddDataField ActiveSheet.PivotTables( _
        "PivotTable44").PivotFields("Sum of Reasons for Delay"), _
        "Sum of Sum of Reasons for Delay", xlSum
    ActiveSheet.PivotTables("PivotTable44").PivotFields("Reasons for Delay"). _
        AutoSort xlDescending, "Sum of Sum of Reasons for Delay"
    ActiveCell.Offset(0, 1).Range("A1").Select
    With ActiveSheet.PivotTables("PivotTable44").PivotFields( _
        "Sum of Sum of Reasons for Delay")
        .Calculation = xlPercentOfTotal
        .NumberFormat = "0,00%"
    End With
End Sub
0
Mikz 28 Июн 2017 в 16:03
1
Я сомневаюсь, что ваше поле уже называется "Сумма ...", поэтому используйте: pt7.AddDataField pt7.PivotFields("Reasons for Delay"), "Sum of Reasons for Delay", xlSum
 – 
Rory
28 Июн 2017 в 16:11
Опередить меня (я пытался опубликовать ответ)
 – 
Shai Rado
28 Июн 2017 в 16:12
Все еще ошибка существует.
 – 
Mikz
28 Июн 2017 в 16:25
Это работает для меня, если имя поля правильное.
 – 
Rory
28 Июн 2017 в 16:58

2 ответа

Измените эту строку: pt7.AddDataField pt7.PivotFields («Сумма причин задержки»), «Сумма причин задержки», xlSum на: pt7.AddDataField pt7.PivotFields («Сумма причин задержки»), «Причины для Задержка », xlSum

0
Shums 28 Июн 2017 в 16:13

Попробуйте ниже код:

Sub CreatePivotTable()
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
With Application
    .ScreenUpdating = False
    .DisplayStatusBar = True
    .StatusBar = "!!! Please Be Patient...Updating Records !!!"
    .EnableEvents = False
    .Calculation = xlManual
End With
'Delete Preivous Pivot Table Worksheet & Insert a New Blank Worksheet With Same Name
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("Pivot_Reasons")
'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:="FilteredPivotTable")
'Insert Blank Pivot Table
Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(1, 1), 
TableName:="FilteredPivotTable")
'Insert Row Fields
With ActiveSheet.PivotTables("FilteredPivotTable").PivotFields("Reasons for 
Delay")
 .Orientation = xlRowField
 .Position = 1
End With
'Insert Data Field
With ActiveSheet.PivotTables("FilteredPivotTable").PivotFields("Reasons for 
Delay")
 .Orientation = xlDataField
 .Position = 1
 .Function = xlSum
 .NumberFormat = "#,##0"
 .Name = "Reasons"
End With

'Format Pivot Table
ActiveSheet.PivotTables("FilteredPivotTable").CompactLayoutRowHeader = "Reasons"
ActiveSheet.PivotTables("FilteredPivotTable").ShowTableStyleRowStripes = True
ActiveSheet.PivotTables("FilteredPivotTable").TableStyle2 = "PivotStyleMedium9"
With Application
    .ScreenUpdating = True
    .DisplayStatusBar = True
    .StatusBar = False
    .EnableEvents = True
    .Calculation = xlAutomatic
End With
End Sub
0
Shums 28 Июн 2017 в 17:03