Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 根据给定值筛选工作簿中的每个轴_Vba_Excel_Pivot Table - Fatal编程技术网

Vba 根据给定值筛选工作簿中的每个轴

Vba 根据给定值筛选工作簿中的每个轴,vba,excel,pivot-table,Vba,Excel,Pivot Table,我正在尝试使用透视表的过滤器,而不是使用单个透视表 理想情况下,我希望宏的一部分在所有工作表上的所有轴之间循环,取消过滤,然后过滤单元格中已预填充的日期 以下是我尝试过的: 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

我正在尝试使用透视表的过滤器,而不是使用单个透视表

理想情况下,我希望宏的一部分在所有工作表上的所有轴之间循环,取消过滤,然后过滤单元格中已预填充的日期

以下是我尝试过的:

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的pagerange引用:

我有几个过滤器,但想在第一个过滤器上进行过滤,称为“周结束日期(Cal)”

谁能把他们的两分钱投进去吗? 经过几天的谷歌搜索,我还没有找到最终的解决方案

我可以做一个录制的宏,它将分别转到每个轴,但我想学习如何使用循环来完成它


谢谢

我目前正在使用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
后来在宏中,我删除了日期引用单元格和切片器,使其更干净,并保存为输出文件夹中的另一个文件


谢谢大家

您使用的是什么版本的Excel?您可以尝试添加一个连接到所有透视表的切片器,然后只更新切片器中的选择。如果可用,切片器方法是一个很好的选择。如果不是,或者对于另一个解决方案,筛选表取决于您的字段是
报告过滤器
还是
列或行标签
。有关更多信息,请参见此。