使用VBA设置Visible = False

时间:2015-08-27 11:55:38

标签: excel vba excel-vba loops pivot-table

编辑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

提前致谢

2 个答案:

答案 0 :(得分:1)

我对数据透视表不太熟悉,但实际上是在引用一个行对象,还是只是一个单元?我相信您不能将单元格设置为visible = false,您必须引用整行/列。

您可以尝试

来测试
dim rngTestRow as range
set rngTestRow = rows(pit.row)
    rngTestRow.Visible = false

答案 1 :(得分:1)

这部分代码:

PI.Name < ActiveSheet.Range("H14").Value

StringDate进行比较。

要使其按预期工作,您应该使用PI.Name函数将CDate转换为日期。

CDate(PI.Name) < ActiveSheet.Range("H14").Value