Excel 我希望通过切片器循环并选择下一个项目和下一个项目来打印轴

Excel 我希望通过切片器循环并选择下一个项目和下一个项目来打印轴,excel,vba,pivot-table,slicers,Excel,Vba,Pivot Table,Slicers,我有一个切片器链接到2个透视表。我想在切片器中从第一项循环到最后一项,并打印相应的表 我尝试了以下代码: Sub Slicerloop Dim sI As SlicerItem, sI2 As SlicerItem, sC As SlicerCache Set sC = ActiveWorkbook.SlicerCaches("Slicer_UID") With sC For Each sI In sC.SlicerItems Fo

我有一个切片器链接到2个透视表。我想在切片器中从第一项循环到最后一项,并打印相应的表

我尝试了以下代码:

Sub Slicerloop
    Dim sI As SlicerItem, sI2 As SlicerItem, sC As SlicerCache
    Set sC = ActiveWorkbook.SlicerCaches("Slicer_UID")
    With sC
        For Each sI In sC.SlicerItems
            For Each sI2 In sC.SlicerItems
                If sI.Name = sI2.Name Then sI2.Selected = True Else: sI2.Selected = False
            Next        
        Next
    End With        
End Sub

没有错误消息,但这不会选择下一个条目,从而更改数据透视表。

通过此操作,您可以在所有切片上循环,并在数据透视表的屏幕截图中使用它们各自的标题

Private Sub LoopAllSlicerItemsAndCapturePivottable()
    Dim sc As Excel.SlicerCache
    Dim si As Excel.SlicerItem, siDummy As Excel.SlicerItem
    Dim pt As Excel.PivotTable
    Dim co As Excel.ChartObject
    Dim wsBlank As Excel.Worksheet

    Set sc = ActiveWorkbook.SlicerCaches("Slicer_UID")
    Set pt = sc.PivotTables(1)

    ' add a blank sheet to get a blank Chart instead of PivotChart later 
    Set wsBlank = ActiveWorkbook.Sheets.Add

    For Each si In sc.SlicerItems
        sc.ClearManualFilter
        For Each siDummy In sc.SlicerItems
            siDummy.Selected = (si.Name = siDummy.Name)
        Next siDummy

        ' now only 1 sliceritem is selected and can be used
        With pt.TableRange2 ' or TableRange1
            .CopyPicture Appearance:=xlScreen, Format:=xlPicture
            Set co = wsBlank.ChartObjects.Add(1, 1, .Width, .Height)
            co.Select
            co.Chart.Paste
            co.Chart.Export _
                fileName:=ActiveWorkbook.Path & "\Whatever " & si.Caption & ".png", _
                filtername:="PNG"
            co.Delete
        End With
    Next si

    Application.DisplayAlerts = False
    wsBlank.Delete
    Application.DisplayAlerts = True

End Sub

你可以在下面的链接中找到答案。请确保在第二个FOR循环之前添加.ShowAll项或.ClearManualFilter。您的代码与链接的代码几乎相同。它确实会逐个选择每个
SlicerItem
,但您不会停止循环(在第一个
Next
之后),因此它会自动一个接一个地选择,您无法识别效果。我添加了一个带有所需功能的答案,以将数据透视表的范围保存为图片。