2016-08-13 191 views
0

我一直在試圖自動化使用各種方法透視表,但每個人給我一個錯誤。這主要是由於我試圖創建一個變量範圍,並且數據透視表可能已經存在於我正在使用的電子表格中。VBA透視表法「PivotTableWizard」 object'_Worksheet」失敗

這最近的工作方法在測試表格,但它並沒有在,我想用它的實際電子表格的工作。電子表格已經有一個數據透視表,這可能是問題?該代碼是停在集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 

預先感謝您

+0

'.PivotTableWizard'?嘗試'設置objTable = Sheet1.PivotTables(1)' –

+0

此外,[避免使用選擇](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros )並使用'With ... End With'。 – Brian

+0

Siddarth,它仍然不起作用。在執行操作之前,我需要製作一張紙嗎?另外,如果文件中已存在數據透視表,是否需要更改索引號? – Steven

回答

1

對於現有的數據透視表,使用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 
+0

我正在嘗試創建一個與已經存在的無關的新數據透視表。上述不會遺漏數據源嗎? – Steven

+0

您必須先創建新的數據透視表,然後引用該數據透視表。 – winghei

+0

謝謝你的幫助,但它給我運行時錯誤「5」 – Steven

0

嘗試使用一塊下面的代碼在你完整的代碼,它會搜索表「名冊」(您想將您的數據透視表)現有數據透視表。

如果它已經透視表,那麼你只需要刷新源數據範圍和數據透視表。 如果沒有,則創建一個包含所有字段的新數據透視表。

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