私は VBA を初めて使用し、ピボット テーブルを作成するマクロを作成しようとしています。さまざまなフィールドをフィルタリングする必要があり、PivotFilters.Add と PivotItems を使用して特定のものだけを通過させようとしました...時には機能しますが、エラーをスローすることもあります。次のコードは問題なく動作します。
Sub CreatePivot()
Dim objTable As PivotTable, objField As PivotField
ActiveWorkbook.Sheets("CP Monthly Data").Select
Range("A1").Select
Set objTable = Sheet1.PivotTableWizard
objTable.Name = "Resource Requests"
objTable.InGridDropZones = True
objTable.RowAxisLayout xlTabularRow
Set objField = objTable.PivotFields("Company name")
objField.Orientation = xlRowField
objField.Position = 1
Set objField = objTable.PivotFields("Probability Status")
objField.Orientation = xlRowField
objField.Position = 2
objField.PivotItems("X - Lost - 0%").Visible = False
objField.PivotItems("X - On Hold - 0%").Visible = False
objField.AutoSort xlDescending, "Probability Status"
Set objField = objTable.PivotFields("Project")
objField.Orientation = xlRowField
objField.Position = 3
Set objField = objTable.PivotFields("Project manager")
objField.Orientation = xlRowField
objField.Position = 4
Set objField = objTable.PivotFields("Resource name")
objField.Orientation = xlRowField
objField.Position = 5
objField.AutoSort xlAscending, "Resource name"
Set objField = objTable.PivotFields("June, 2012")
objField.Orientation = xlDataField
objField.Function = xlSum
objField.NumberFormat = "##"
objField.Caption = "June"
Set objField = objTable.PivotFields("Workgroup Name")
objField.Orientation = xlPageField
objField.PivotItems("ATG").Visible = False
objField.PivotItems("India - ATG").Visible = False
objField.PivotItems("India - Managed Middleware").Visible = False
Application.DisplayAlerts = True
End Sub
「リソース名」フィールドで問題が発生しています。「*TBD」で始まるリソース名のみを表示し、名前に「ATG」が含まれるものは除外する必要があります。私はこれまでに次のことを試しました:
Set objField = objTable.PivotFields("Resource name")
objField.Orientation = xlRowField
objField.Position = 5
objField.PivotFilters.Add xlCaptionContains, Value1:="TBD"
objField.PivotFilters.Add xlCaptionDoesNotContain, Value1:="ATG"
objField.AutoSort xlAscending, "Resource name"
「実行時エラー '1004': アプリケーション定義またはオブジェクト定義のエラー」を返します
名前に「TBD」のないものも除外する必要があるため、これはまさに私が必要とするものではありませんが、試してみました:
Set objField = objTable.PivotFields("Resource name")
objField.Orientation = xlRowField
objField.Position = 5
objField.PivotItems("*ATG*").Visible = False
objField.AutoSort xlAscending, "Resource name"
「実行時エラー '1004': PivotField クラスの PivotItems プロパティを取得できません」を返します
また、マクロを記録して、結果を自分のコードと照合してみました。結果は、私が試した PivotFilters.Add を使用します。記録されたマクロと私のコードの主な違いは PivotTableWizard の使用です。
これを修正する方法についてのアイデアはありますか? 私は Excel 2010 を使用しており、これを検索するのに何時間も費やしましたが、試したことはありません。助けてくれてありがとう!!