[英]Pivot Table VBA Filter for dates before
我是这个论坛的新手,对于我过去 4 天一直在处理的问题,我真的很感激。
我有一个宏来过滤数据透视表中同一工作表中单元格 B5 上日期之前的日期。 不幸的是,它会产生一些数据,但不是所有数据。
下面是我的代码(基于研究/复制粘贴),如果代码不是最佳实践,我深表歉意。 我还附上了一张图片以供参考。 提前感谢您的评价和支持。
'Sub BeforeDate()
Dim sSheetName As String
Dim sPivotName As String
Dim sFieldName As String
Dim sFilterCrit As String
Dim pi As PivotItem
'Set the variables
sSheetName = "PivotTable"
sPivotName = "PivotTable1"
sFieldName = "apptdate"
'sFilterCrit = "5/2/2019"
sFilterCrit = ThisWorkbook.Worksheets(sSheetName).Range("B5").Value
With ThisWorkbook.Worksheets(sSheetName).PivotTables(sPivotName).PivotFields(sFieldName)
'Clear all filter of the pivotfield
.ClearAllFilters
'Loop through pivot items of the pivot field
'Hide or filter out items that do not match the criteria
For Each pi In .PivotItems
If pi > Range("B5") Then
pi.Visible = False
Else
pi.Visible = True
End If
Next pi
End With
End Sub
您的代码有几个错误。 首先,要将字符串转换为日期,请将其包装在 CDate() 中(即CDate(ThisWorkbook.Worksheets(sSheetName).Range("B5").Value)
)。
此外,您的 For Each 正在将 pi(PivotItem 对象)与 Range("B5") 进行比较-我相信您的意思是指的是 sFilterCrit 而不是 Range("B5"),而 pi 应该是 pi.Value(我认为是仍然会像在 VBA 中一样工作,但你真的想要值,而不是对象)。 此外,这应该像上面的 sFilterCrit 值一样传递给 CDate()。
最后,您可以使用以下内容简化 If 语句: pi.Visible = CDate(pi.Value) < sFilterCrit
本质上,If 语句的结果(真或假)被传递给 Visible 属性(注意切换的比较运算符)。
这是更新后的代码:
Sub BeforeDate()
Dim sSheetName As String
Dim sPivotName As String
Dim sFieldName As String
Dim sFilterCrit As String
Dim pi As PivotItem
'Set the variables
sSheetName = "PivotTable"
sPivotName = "PivotTable1"
sFieldName = "apptdate"
'sFilterCrit = "5/2/2019"
sFilterCrit = CDate(ThisWorkbook.Worksheets(sSheetName).Range("B5").Value)
With ThisWorkbook.Worksheets(sSheetName).PivotTables(sPivotName).PivotFields(sFieldName)
'Clear all filter of the pivotfield
.ClearAllFilters
'Loop through pivot items of the pivot field
'Hide or filter out items that do not match the criteria
For Each pi In .PivotItems
pi.Visible = CDate(pi.Value) < sFilterCrit
Next pi
End With
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.