我正在尝试使用数据透视表的过滤器而不使用单个数据透视表。
理想情况下,我希望我的宏的一部分循环遍历所有工作表上的所有支点,不对它们进行过滤,然后过滤已在单元格中预先生成的日期。
以下是我的尝试:
Dim LastWeek As Date
LastWeek = Range("K4").Value
Dim ws As Worksheet
Dim pt As PivotTable
For Each ws In ThisWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.PivotFields("Week Ending Date(Cal)").ClearAllFilters
pt.PivotFields("Week Ending Date(Cal)").CurrentPage = _
LastWeek
Next pt
Next ws
ActiveWorkbook.RefreshAll
尝试不同的东西,这两行不应过滤,并在最后日期过滤。没有错误出现。 LastWeek变量获取正确的日期值,并且日期可用。
循环代码有几次意味着它可能会选择枢轴,但不会发生过滤。我也尝试使用peltier的页面范围引用:http://peltiertech.com/referencing-pivot-table-ranges-in-vba/
我有几个过滤器,但想过滤第一个称为“周结束日期(Cal)”
请问有人扔两分钱吗? 经过几天的谷歌搜索,我找不到最终的解决方案。
我可以做一个单独转到每个转轴的录制宏,但我想学习如何用循环来做。
谢谢
答案 0 :(得分:1)
我目前正在使用Excel 2010,但很快就会过渡到365 64位。希望东西能继续发挥作用。
感谢您的回复和好主意。我使用切片机,它实际上是更优雅的解决方案。我仍然想知道如何使用循环以及学习目的。
如果其他人需要,这是解决方案:
ActiveWorkbook.RefreshAll
'Refreshed all so that new dates appear in the slicer
Dim LastWeek As String
'Had to restate LastWeek as a String instead of Date
LastWeek = Range("K4").Value
'Week Ending Date (Cal) is the name of the slicer connected with a given filter
'Change this name to fit your purposes and dont forget to connect your slicer with all the pivots
ActiveSheet.Shapes.Range(Array("Week Ending Date(Cal)")).Select
With ActiveWorkbook.SlicerCaches("Slicer_Week_Ending_Date_Cal")
.SlicerItems(LastWeek).Selected = True
.SlicerItems("(blank)").Selected = False
End With
ActiveWorkbook.RefreshAll
稍后在宏中我删除了日期引用单元格和切片器以使其更清晰并保存为输出文件夹中的另一个文件。
感谢大家。