我的数据透视表类似于:2019/1/13 1:00
,2019/1/13 4:00
…直到2019/3/12 23:00
。
我想过滤2019/2/13
到2019/3/12
期间的所有时间戳,包括2019/2/13 2:00
,2019/2/13 6:00
…
试图使用以下代码
datecom = DateSerial(Year(Date), Month(Date) - 3, Day(Date))
dDate = Format(datecom + TimeValue("00:00:00"), "yyyy-mm-dd hh:mm")
dDateto = Format(Now(), "yyyy-mm-dd hh:mm")
Set PvtTbl = sh.PivotTables("ROS-PVT5").PivotFields("IN Raised")
PvtTbl.ClearAllFilters
PvtTbl.PivotFilters.Add Type:=xlCaptionIsBetween, Value1:=dDate, Value2:=dDateto
但是,它将显示为标签过滤器,但未返回任何内容。
如何使用VBA过滤两个日期之间的所有时间?
答案 0 :(得分:0)
首先,您不应该不要将变量名“ PvtTbl”用于PivotField -这会引起误解,并容易导致误解或错误!
我建议在每个模块上方使用Option Explicit
并声明e。 G。像这样:
Dim PvtTbl as PivotTable
Dim PvtFld as PivotField
我建议使用xlCaptionIsBetween
代替xlDateBetween
来比较日期值!第一个进行文本比较,并且只有当您使用年/月/日表示法的日期格式时,才有机会在您的情况下工作。
日期过滤器仅适用于RowField
或ColumnField
,但不适用于数据透视表本身或PageField
(这是一个过滤器字段。您可以在其中使用时间切片器)。
如果您的数据透视字段是行或列字段,并且其中具有日期时间值,则其PivotFilter
的值需要为String
(就像您已经做的那样)。
我建议使用Add2
,使用类型xlDateBetween
,用CStr
键入每个日期时间,并使用WholeDayFilter
:
Set PvtFld = PvtTbl.RowFields("IN Raised")
PvtFld.ClearAllFilters
PvtFld.PivotFilters.Add2 _
Type:=xlDateBetween, _
Value1:=CStr(DateSerial(Year(Date), Month(Date) - 1, Day(Date))), _
Value2:=CStr(Date), _
WholeDayFilter:=True
仅当您不能整天工作并且需要排除一些小时时,请像以前一样使用格式化的字符串,包括小时信息,并WholeDayFilter:=False
。
在任何情况下都不必添加TimeValue(“ 00:00:00”),因为它刚好等于0。
答案 1 :(得分:-1)
它的工作原理如下。不知道是因为我重新打开了该工作表。
dDate = Format(datecom, "yyyy/m/dd")
dDateto = Format(Now(), "yyyy/m/dd")
'''''''''''Pivot 5
Set PvtTbl = sh.PivotTables("ROS-PVT5").PivotFields("IN Raised")
PvtTbl.ClearAllFilters
PvtTbl.PivotFilters.Add2 Type:=xlCaptionIsBetween, Value1:=dDate, Value2:=dDateto