我有vba代码可以帮助我创建数据透视表,但是现在我遇到了具有0值的条目,在数据透视表上显示为空白但是我想修改我的代码以便我可以过滤掉0值。换句话说,我想使pivotitem不显示右侧的值是否为0。
请看欲望结果的图片。当我运行我的代码时,没有错误,似乎什么也没发生。
'filter out zero
Dim ws1 As Worksheet
Set ws1 = Worksheets("PivotTable")
Dim pf2 As PivotField
Set pf2 = Pvt.PivotFields("Price Range")
Dim pi2 As PivotItem
For Each pi2 In pf2.PivotItems
pi2.Visible = Len(ws1.Range(pi2.DataRange.Address)) > 0
Next
End Sub
答案 0 :(得分:1)
上面的代码有很多问题,主要是未分配的变量。如果您在模块的顶部使用Option Explicit
,那么它将极大地帮助您学习正确的代码语法。
这对你有用:
Option Explicit
Sub FilterBlankPivotItems()
Dim ws1 as Worksheet
Set ws1 = Worksheets("PivotTable")
Dim pt as PivotTable
Set pt = ws1.PivotTable("PivotTable1")
Dim pf as PivotField
Set pf = pt.PivotFields("PriceRange")
Dim pi as PivotItem
For each pi in pf.PivotItems
pi.Visible = Len(ws1.Range(pi.DataRange.Address)) > 0
Next
End Sub
答案 1 :(得分:1)
没有必要遍历PivotItems。相反,您只需在“价格范围”字段上设置“值”过滤器,即可仅显示具有大于零的对应值的项目。
Option Explicit
Sub FilterBlankPivotItems()
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pfValues As PivotField
Set ws = Worksheets("SomeWorksheetName")
Set pt = ws.PivotTables("SomePivotTableName")
Set pf = pt.PivotFields("SomePivotFieldName")
Set pfValues = pt.PivotFields("SomeValuesFieldName")
pf.ClearAllFilters
pf.PivotFilters.Add2 Type:=xlValueIsGreaterThan, DataField:=pfValues, Value1:=0
End Sub
这与执行此操作相同: