object__Worksheet的VBA数据透视表方法“PivotTableWizard”失败

我一直试图使用各种方法自动化数据透视表,但每个人都给了我一个错误。 这主要是因为我正在尝试创build一个variables范围,并且数据透视表可能已经存在于我正在使用的电子表格中。

这个最新的方法在一个testing电子表格上工作,但是它并不适用于我想要使用的实际电子表格。 电子表格已经有一个数据透视表,这可能是问题? 代码停在设置objTable = Sheet1.PivotTable

Dim objTable As PivotTable Dim objField As PivotField ActiveWorkbook.Sheets("Roster").Select Range("A1").Select Set objTable = Sheet1.PivotTableWizard Set objField = objTable.PivotFields("Member Type") objField.Orientation = xlRowField Set objField = objTable.PivotFields("AIA Member Status") objField.Orientation = xlColumnField Set objField = objTable.PivotFields("Customer") objField.Orientation = xlDataField objField.Function = xlCount Set objField = objTable.PivotFields("Expire Date") objField.Orientation = xlPageField objTable.PivotFields("Expire Date"). _ CurrentPage = expireyear objTable.PivotFields("Member Type") _ .PivotItems("Cornerstone Partners").Visible = False objTable.PivotFields("Member Type") _ .PivotItems("Honorary AIA").Visible = False objTable.PivotFields("Member Type") _ .PivotItems("Honorary Fellow").Visible = False objTable.PivotFields("AIA Member Status") _ .PivotItems("Proforma").Visible = False Range("A6, A8").Select Range("A8").Activate Selection.Group Range("A6").Select objTable.PivotFields("Member Type2").PivotItems( _ "Group1").Caption = "Architect" objTable.PivotFields("Member Type2").PivotItems( _ "Architect").ShowDetail = False Range("A7,A8,A10").Select Range("A7").Activate Selection.Group Range("A7").Select objTable.PivotFields("Member Type2").PivotItems( _ "Group2").Caption = "Emeritus" objTable.PivotFields("Member Type2").PivotItems( _ "Emeritus").ShowDetail = False objTable.PivotFields("Member Type2").PivotItems( _ "Associate").ShowDetail = False objTable.PivotFields("Member Type2").PivotItems( _ "International Associate").ShowDetail = False objTable.PivotFields("Member Type2").PivotItems( _ "International Associate").ShowDetail = False objTable.PivotFields("Member Type2").PivotItems( _ "Allied").ShowDetail = False objTable.PivotFields("Member Type2").PivotItems( _ "Allied").Position = 5 objTable.PivotFields("Member Type2").PivotItems( _ "Emeritus").Position = 4 

先谢谢你

对于现有PivotTables表,请使用PivotTables表并确保工作表已存在。 尝试:

 With ThisWorkBook.Sheets("sheet_name") Set objTable = .PivotTables("pivot_name or index") 'use the correct index or name if you have multiple '.. do more stuffs End With 

创造一个新的:

 With ThisWorkbook Set objtable = .PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "sheet_name!A1:D20", Version:=xlPivotTableVersion15).CreatePivotTable _ (TableDestination:="sheet_name!R1C6", TableName:="thePivotName", DefaultVersion _ :=xlPivotTableVersion15) '.. do more stuffs End With 

尝试在完整代码中使用下面的代码片段,它会search现有数据透视表的工作表“ Roster ”(您要放置数据透视表的位置)。

如果它已经有了Pivot Table,那么你只需要刷新Source Data Range和Pivot Table。 如果没有,则创build一个包含所有字段的新数据透视表。

 Dim shtPivot As Worksheet Dim objTable As PivotTable Dim PvtTableCounter As Integer ' modify to your desired Pivot Table location Set shtPivot = ThisWorkbook.Sheets("Roster") For Each objTable In shtPivot.PivotTables PvtTableCounter = PvtTableCounter + 1 Next objTable ' "Roster" sheet doesn't have any Pivot tables in it >> create it If PvtTableCounter = 0 Then ' create your Pivot table and all your fields here... Else ' There is at least 1 Pivot Table in "Roster" sheet ' just modify the source data range and refresh the Pivot End If