2016-08-13 62 views
0

さまざまな方法でピボットテーブルを自動化しようとしていますが、それぞれがエラーを表示しています。これは主に、可変範囲を作成しようとしていて、ピボットテーブルが既に使用しているスプレッドシートに存在する可能性があるためです。VBAピボットテーブルメソッド ''ワークシート 'オブジェクトの' PivotTableWizard 'が失敗しました

この最新の方法はテストスプレッドシートで機能しましたが、実際のスプレッドシートでは使用しませんでした。スプレッドシートには既にピボットテーブルがありますが、これは問題の可能性がありますか?コードがセットで停止している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を使用し、ワークシートが既存されていることを確認し、既存のピボットテーブルの場合は、事前

+0

'.PivotTableWizard'? 'set objTable = Sheet1.PivotTables(1)'を試してください –

+0

また、[選択を使用しないでください](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros )With With End With'を使用します。 – Brian

+0

Siddarth、それでも動作しません。操作を行う前に用紙を1枚作る必要がありますか?また、ピボットテーブルがファイル内にすでに存在する場合は、インデックス番号を変更する必要がありますか? – Steven

答えて

1

でいただきありがとうございます。試してみてください。

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 
関連する問題