Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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清除所有切片器并刷新透视表Excel 2013_Vba_Excel - Fatal编程技术网

VBA清除所有切片器并刷新透视表Excel 2013

VBA清除所有切片器并刷新透视表Excel 2013,vba,excel,Vba,Excel,我正在寻找VBA来清除所有切片器并刷新透视表Excel 2013,但是,它会在“ClearAllFilters”上中断。我研究的所有东西都建议使用它。是否有更好的方法刷新切片器并显示所有结果。此外,还希望包括数据模型和透视表的刷新 Public Sub RefreshSlicersOnWorksheet(ws As Worksheet) Dim sc As SlicerCache Dim scs As SlicerCaches Dim slice As Slicer Set scs = ws

我正在寻找VBA来清除所有切片器并刷新透视表Excel 2013,但是,它会在“ClearAllFilters”上中断。我研究的所有东西都建议使用它。是否有更好的方法刷新切片器并显示所有结果。此外,还希望包括数据模型和透视表的刷新

Public Sub RefreshSlicersOnWorksheet(ws As Worksheet)

Dim sc As SlicerCache
Dim scs As SlicerCaches
Dim slice As Slicer

Set scs = ws.Parent.SlicerCaches

If Not scs Is Nothing Then
    For Each sc In scs
        For Each slice In sc.slicers
            If slice.Shape.Parent Is ws Then
                slice.ClearAllFilters
                Exit For 'unnecessary to check the other slicers of the slicer cache
            End If
        Next slice
    Next sc
End If
端接头

我尝试了你的建议,但是,ClearAllFilters仍然存在问题

    Sub Reset()
Dim pt As PivotTable

 Application.ScreenUpdating = False
 ActiveWorkbook.Model.Refresh
    RefreshSlicersOnWorksheet ActiveSheet
    For Each pt In ActiveSheet.PivotTables
        pt.RefreshTable
    Next pt
Application.ScreenUpdating = True
End Sub
Public Sub RefreshSlicersOnWorksheet(ws As Worksheet)
Dim pt As PivotTable
Dim slice As Slicer

For Each pt In ws.PivotTables
    For Each slice In pt.Slicers
        slice.SlicerCache.ClearAllFilters
    Next slice
    pt.PivotCache.Refresh
Next pt
End Sub
该方法适用于切片机对象,而不适用于对象

更改:

slice.ClearAllFilters
致:

编辑:或者,您可以从工作表中的数据透视表集合开始,然后从那里访问切片器。然后可以刷新透视表,如下所示:

Dim pt As PivotTable
Dim slice As Slicer

For Each pt In ws.PivotTables
    For Each slice In pt.Slicers
        slice.SlicerCache.ClearAllFilters
    Next slice
    pt.PivotCache.Refresh
Next pt

我已经添加了第二个方法,该方法来自工作表的数据透视表集合感谢您的建议,但是我仍然对clearallfilters部分存在问题。Sub Reset()Dim pt As PivotTable Dim slice As Slicer Application.ScreenUpdate=False ActiveWorkbook.Model.Refresh“RefreshSlicersOnWorksheet ActiveSheet用于ActiveSheet中的每个pt.PivotTables pt.RefreshTable“下一个pt”用于ws.PivotTables中的每个pt.Slicers slice.SlicerCache.ClearFilters中的每个切片下一个切片pt.PivotCache.Refresh下一个pt Application.ScreenUpdating=True End Sub
Dim pt As PivotTable
Dim slice As Slicer

For Each pt In ws.PivotTables
    For Each slice In pt.Slicers
        slice.SlicerCache.ClearAllFilters
    Next slice
    pt.PivotCache.Refresh
Next pt