我是VBA新手,正在嘗試編寫一個將創建數據透視表的宏。我需要過濾各個領域,並嘗試使用PivotFilters.Add和PivotItems只讓某些東西通過...有時它的工作,但有時它會引發錯誤。下面的代碼工作得很好:過濾用於在Excel 2010中創建數據透視表的宏問題VBA
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’:無法獲取透視字段類的PivotItems財產
我也嘗試錄製宏並檢查我的代碼的結果。結果使用我試過的PivotFilters.Add。錄製的宏和我的代碼之間的主要區別在於使用了PivotTableWizard,我開始懷疑這是否重要......我是新手,請記住?
有關如何解決此問題的任何想法?我正在使用Excel 2010,並花了數小時尋找這個,並且我沒有嘗試過任何工作。提前感謝任何幫助!
感謝您的答覆!我嘗試用PivotFilters.Add替換AutoSort過濾器(不嘗試你建議的第二塊代碼),並拋出相同的「應用程序定義或對象定義的錯誤」。我之前嘗試添加一行以允許不同類型的過濾器到一個字段: Dim objTable As PivotTable,objField As PivotField ActiveWorkbook.Sheets(「CP Monthly Data」)。Select Range(「A1」)。Select 設置objTable = Sheet1.PivotTableWizard objTable.Name = 「資源請求」 objTable.InGridDropZones =真 objTable.RowAxisLayout xlTabularRow objTable.AllowMultipleFilters = TRUE; – user1475657
添加在「運行'objTable.AllowMultipleFilters = TRUE'線結果時間錯誤'5':無效的過程調用或參數「 – user1475657
我沒有建議2個不同的東西,而是它的所有代碼塊。爲了使其工作,請將所有過濾器從現場取出,然後運行代碼,將其插入原始代碼的空間中。看到我編輯的答案。 –