Excel 我希望通过切片器循环并选择下一个项目和下一个项目来打印轴
我有一个切片器链接到2个透视表。我想在切片器中从第一项循环到最后一项,并打印相应的表 我尝试了以下代码: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
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
之后),因此它会自动一个接一个地选择,您无法识别效果。我添加了一个带有所需功能的答案,以将数据透视表的范围保存为图片。