【问题标题】:Pivottable VBA Code Not Correctly Filtering Dates可透视 VBA 代码未正确过滤日期
【发布时间】:2014-08-09 09:00:49
【问题描述】:

我正在尝试过滤日期以仅反映过去三个月、当​​前月份和接下来的 3 个月。我最终得到的是该范围内所有年份的所有日期。同样出于某种原因,它取消了三月的第二周。我做错了什么?

代码如下

For Each pi In pvt.PivotFields("Week Of").PivotItems
Select Case pi.Value
    Case Is < DateSerial(Year(Now) + 1, Month(Now) - 3, Day(Now))
        pi.Visible = False

    Case pi.Value > DateSerial(Year(Now) + 1, Month(Now) + 3, Day(Now))

        pi.Visible = False

    Case Else

        pi.Visible = True

End Select

【问题讨论】:

  • 愚蠢的问题,但是“Week Of”列是否也显示年份?
  • 另一个问题:pi.Value 是 DateSerial 格式吗?
  • 是的。它确实如此,我尝试了你的解决方案,它奏效了……回到我的代码并做一些艰苦的思考。感谢您的帮助!

标签: sql excel vba date


【解决方案1】:

您的案例陈述不一致。第一个说:

Case Is < ...

你的第二个说:

Case pi.Value > ...

我很确定第二个也应该使用Case Is。不确定这是否能解决问题,但我想指出这一点。

或者您可以重写代码以完全跳过 Case 语句:

iEarliest = DateSerial(Year(Now) + 1, Month(Now) - 3, Day(Now))
iLatest = DateSerial(Year(Now) + 1, Month(Now) + 3, Day(Now))
For Each pi In pvt.PivotFields("Week Of").PivotItems
    If pi.Value > iLatest or pi.Value < iEarliest then
        pi.Visible = False
    Else
        pi.Visible = True
    End if
Next

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 2016-10-09
    • 2019-04-08
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多