获取数据透视 table 自定义筛选行标签中的标准值
Get the criteria value in a pivot table custom-filtered row label
数据透视 table 中的 TGL 行标签使用自定义过滤器进行过滤,如下图所示。
我需要的是 vba 代码来了解 TGL 过滤的标准值是什么。
(在这种情况下,条件值为“2022 年 1 月 1 日”),因此我不需要 运行 带有冗余代码的宏,例如下面的 sub test1 :
Sub test1()
Dim dt As String
dt = Format(DateAdd("m", -2, Format("01/" & Month(Date) & "/" & Year(Date))), "dd-mmmm-yyyy")
With ActiveSheet.PivotTables("ptHarga").PivotFields("TGL")
.ClearAllFilters
.PivotFilters.Add Type:=xlAfterOrEqualTo, Value1:=dt
End With
End Sub
虽然它不会伤害我,但是子 test1 一次又一次地用相同的标准过滤 TGL,尽管 TGL 的先前条件已经用那个标准过滤了。
所以我制作了一个涉及 IF.... 的 sub :
Sub test2()
Dim dtNow As Date
dtNow = Format(DateAdd("m", 1, Format("01/" & Month(Date) & "/" & Year(Date))), "dd-mmm-yyyy")
With ActiveSheet.PivotTables("ptHarga").PivotFields("TGL")
For Each pit In .PivotItems
If DateDiff("m", CDate(pit), dtNow) = 3 Then Call test1: Exit For
Next
End With
End Sub
在sub test2中,dtNow只是用来假设2022年4月的宏是运行,
如果与任何 TGL 数据透视项的月份差为 3,则应将条件更改为“2022 年 2 月 1 日”(调用 test1)。
我也尝试过使用 application.min 的另一个 sub,没有循环。
Sub test3()
Dim dtNow As Date
dtNow = Format(DateAdd("m", 1, Format("01/" & Month(Date) & "/" & Year(Date))), "dd-mmm-yyyy")
With ActiveSheet.PivotTables("ptHarga").PivotFields("TGL")
.ClearAllFilters
If DateDiff("m", CDate(Application.Min(.DataRange)), dtNow) = 3 Then Call test1
End With
End Sub
出于好奇,我的问题是:
有没有代码可以直接获取pivottable字段当前过滤的TGL中的criteria值?
如有任何回复,我们将不胜感激。
先谢谢你了。
例如:
Dim pt As PivotTable, pf As PivotField
Set pt = ActiveSheet.PivotTables(1)
With pt.PivotFields("Date").PivotFilters(1)
Debug.Print "Type", .FilterType
Debug.Print "Value1", .Value1
End With
参见:https://docs.microsoft.com/en-us/office/vba/api/excel.pivotfilter
数据透视 table 中的 TGL 行标签使用自定义过滤器进行过滤,如下图所示。
我需要的是 vba 代码来了解 TGL 过滤的标准值是什么。
(在这种情况下,条件值为“2022 年 1 月 1 日”),因此我不需要 运行 带有冗余代码的宏,例如下面的 sub test1 :
Sub test1()
Dim dt As String
dt = Format(DateAdd("m", -2, Format("01/" & Month(Date) & "/" & Year(Date))), "dd-mmmm-yyyy")
With ActiveSheet.PivotTables("ptHarga").PivotFields("TGL")
.ClearAllFilters
.PivotFilters.Add Type:=xlAfterOrEqualTo, Value1:=dt
End With
End Sub
虽然它不会伤害我,但是子 test1 一次又一次地用相同的标准过滤 TGL,尽管 TGL 的先前条件已经用那个标准过滤了。
所以我制作了一个涉及 IF.... 的 sub :
Sub test2()
Dim dtNow As Date
dtNow = Format(DateAdd("m", 1, Format("01/" & Month(Date) & "/" & Year(Date))), "dd-mmm-yyyy")
With ActiveSheet.PivotTables("ptHarga").PivotFields("TGL")
For Each pit In .PivotItems
If DateDiff("m", CDate(pit), dtNow) = 3 Then Call test1: Exit For
Next
End With
End Sub
在sub test2中,dtNow只是用来假设2022年4月的宏是运行, 如果与任何 TGL 数据透视项的月份差为 3,则应将条件更改为“2022 年 2 月 1 日”(调用 test1)。
我也尝试过使用 application.min 的另一个 sub,没有循环。
Sub test3()
Dim dtNow As Date
dtNow = Format(DateAdd("m", 1, Format("01/" & Month(Date) & "/" & Year(Date))), "dd-mmm-yyyy")
With ActiveSheet.PivotTables("ptHarga").PivotFields("TGL")
.ClearAllFilters
If DateDiff("m", CDate(Application.Min(.DataRange)), dtNow) = 3 Then Call test1
End With
End Sub
出于好奇,我的问题是:
有没有代码可以直接获取pivottable字段当前过滤的TGL中的criteria值?
如有任何回复,我们将不胜感激。
先谢谢你了。
例如:
Dim pt As PivotTable, pf As PivotField
Set pt = ActiveSheet.PivotTables(1)
With pt.PivotFields("Date").PivotFilters(1)
Debug.Print "Type", .FilterType
Debug.Print "Value1", .Value1
End With
参见:https://docs.microsoft.com/en-us/office/vba/api/excel.pivotfilter