【问题标题】:Using VBA to set Visible = False使用 VBA 设置 Visible = False
【发布时间】:2015-11-21 19:07:19
【问题描述】:

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

提前致谢

【问题讨论】:

  • 您的代码在哪里出错?错误是什么?
  • 它不会给我一个错误,它的简单不会返回任何东西。顺便说一句,我所有的字段都被格式化为日期单元格。
  • 您能否正确解释您的问题中什么不起作用。简单地说它不工作并不能真正帮助找出可能出现的问题
  • 我编辑了更多细节
  • 数据透视表中的日期很有趣,并且可能存在区域设置问题。我写了一篇关于此的帖子,其中包含一些可能相关的非常有见地的 cmets。见dailydoseofexcel.com/archives/2013/11/09/a-date-with-pivotitems

标签: vba excel loops pivot-table


【解决方案1】:

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

你可以试试这个

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

【讨论】:

  • 当我不使用日期字段时它可以工作,也许数据透视表将日期字段显示为字符串?
  • 您能否链接到错误消息的屏幕截图,最好使用它不喜欢的突出显示的代码?
【解决方案2】:

这部分代码:

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

StringDate 进行比较。

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

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

【讨论】:

  • 非常感谢,它的部分工作。唯一的问题是 CDate 返回 MM/DD/YYYY,不幸的是我使用 DD/MM/YYYY。我找不到日期格式的任何选项。
  • @user3614882 CDate 不返回特定格式的日期,而是返回Date 变量类型(内部存储为整数)。如果您没有得到正确的结果,那么可能H14H15 不包含有效日期,而是包含文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 2017-05-06
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多