编辑1:
Sub MultiItemPivotFilter()
Dim PI As PivotItem
For Each PI In ActiveSheet.PivotTables("test").PivotFields("date").PivotItems
If PI.Name < ActiveSheet.Range("H14").Value Or PI.Name > ActiveSheet.Range("H15").Value Then
PI.Visible = False
Else
PI.Visible = True
End If
Next PI
End Sub
H14和H15只是从源表复制的固定日期,但仍然是If条件永远不为真。它返回一个最终错误,因为它无法将所有行设置为
visible = false
结束编辑1:
我正在尝试编写一个VBA脚本,该脚本允许用户从两个日期之间的数据透视表中选择所有观察结果。到目前为止,我的脚本无效。
Sub datelist()
Set pf = Sheets("sheet1").PivotTables("test")
Set pt = pf.PivotFields("date")
For Each pit In pt.PivotItems
If pit.Value < Sheets("sheet1").Range("G14").Value Then pit.Visible = False
Next
End Sub
G14是一个包含用户从菜单中选择的值的单元格。我希望实现每个日期低于所选值的行设置为Visible = False
提前致谢
答案 0 :(得分:1)
我对数据透视表不太熟悉,但实际上是在引用一个行对象,还是只是一个单元?我相信您不能将单元格设置为visible = false,您必须引用整行/列。
您可以尝试
来测试dim rngTestRow as range
set rngTestRow = rows(pit.row)
rngTestRow.Visible = false
答案 1 :(得分:1)
这部分代码:
PI.Name < ActiveSheet.Range("H14").Value
将String
与Date
进行比较。
要使其按预期工作,您应该使用PI.Name
函数将CDate
转换为日期。
CDate(PI.Name) < ActiveSheet.Range("H14").Value