循环切片切片器并选择值

时间:2015-10-20 14:43:41

标签: excel vba

我有一个数据切片器,其中包含一个链接到数据透视表的网站列表。我想循环切片器来实现以下目的:

选择一个网站
显示相关值
将数据导出为PDF文件
选择下一个网站等

我已经获得了将数据导出为PDF文件的代码,但我正在努力遍历切片器并在每个站点上进行过滤。目前我有以下内容:

Sub ExportPDFs()

Dim sI As SlicerItem

For Each sI In ActiveWorkbook.SlicerCaches("Slicer_site").SlicerItems

    Debug.Print sI.Name
    Debug.Print Range("A3")

    '    ChDir "Q:\PROMs\Data Completeness\PDFs"

    '    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    '        "Q:\PROMs\Data Completeness\PDFs\PROMS data completeness - " & sI.Name & ".pdf", _
    '        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
     '        :=False, OpenAfterPublish:=False

Next

End Sub

我添加了debug.print行(单元格“A3”包含我的工作表上的站点名称,所以当我选择不同的切片器项时这会改变)来测试它,它遍历每个切片器项但不会更改数据,以便调试窗口显示以下内容:

Site 1
Site 1
Site 2
Site 1
Site 3
Site 1
Site 4
Site 1

如何在每次循环时过滤数据?

1 个答案:

答案 0 :(得分:0)

您需要主动告诉VBA选择特定切片器项并取消选择其余项。可能有一种更有效的方法来做到这一点,但我刚刚创建并测试了以下内容并且它有效:

Dim sI As SlicerItem, sI2 As SlicerItem, sC As SlicerCache

Set sC = ActiveWorkbook.SlicerCaches("Slicer_site")

With sC

    For Each sI In sC.SlicerItems

        sC.ClearManualFilter

        For Each sI2 In sC.SlicerItems
            If sI.Name = sI2.Name Then sI2.Selected = True Else: sI2.Selected = False
        Next

        Debug.Print sI.Name
        'add export to PDF code here

    Next

End With