在xlPivotFiltertypes中使用一个variables

我有一个数据透视表与Date作为一个枢轴字段。 我想添加Type=xlAllDatesInPeriodJanuary一个数据透视filter,但我不想硬编码我过滤到哪个时期。 我不知道这是否可能在VBA中,但我可以使用一个variables,并连接该枢纽filtertypes? 比方说,我想要的月份被inputSheet2 ,单元格A1
我知道这是行不通的,但我想做一些事情的效果:

 Dim month As String Dim PvtTbl As PivotTable month = ActiveWorkbook.Sheets("Sheet2").Range("A1") PvtTbl = ActiveWorkbook.Sheets("sheet1").PivotTables("PivotTable1") PvtTbl.ClearAllFilters PvtTbl.PivotFields("Date").PivotFilters.Add Type="xlAllDatesInPeriod" & month 

这样,数据透视表会自动过滤到inputSheet2A1任何月份。 如果这是不可能的,我可以编写12 If语句读取月份的名称和代码Type=xlAllDatesInPeriodJanuary/February/March/etc ,但只有这样才是唯一的方法。

您可以使用Dictionary创build枚举。 xlAllDatesInPeriodJanuaryxlAllDatesInPeriodDecember的值是从5768 ,所以添加表示枚举名和值的string:

 Dim d As Object, i As Long Set d = CreateObject("Scripting.Dictionary") For i = 1 To 12 d.Add "xlAllDatesInPeriod" & MonthName(i), 56 + i Next 

然后,您可以使用您的字典d ,根据string键检索适当的值:

 PvtTbl.PivotFields("Date").PivotFilters.Add Type:=d("xlAllDatesInPeriod" & month) 

如果您将month存储为整数( 1 - 12 ),则可能会忘记所有有关字典的内容,只需使用以下内容:

 PvtTbl.PivotFields("Date").PivotFilters.Add Type:=(xlAllDatesInPeriodJanuary + month - 1)