在切片器中select多个项目

我有工作代码select从切片机的单个项目,但它不适用于多个项目。

通过读取范围中的哪些单元格为粗体来设置select,并填充STP(46)的string数组,直到STP(k)。 这工作正常。

然后,代码应该取消select不在STP中的切片器中的所有项目,并select那些。 这适用于一个select,但不适用于多个select – 它错误地select所有项目,直到最后一个项目被选中。

With ActiveWorkbook.SlicerCaches("Slicer_STP_Name") For i = 1 To .SlicerItems.Count For j = 1 To k If .SlicerItems(i).Selected And .SlicerItems(i).Caption <> STP(j) Then .SlicerItems(i).Selected = False Next j Next i For i = 1 To .SlicerItems.Count For j = 1 To k If .SlicerItems(i).Caption = STP(j) Then .SlicerItems(i).Selected = True: Exit For Next j Next i End with 

因此,不要select切片机中的第2和第4项,而是select1st,2nd,3rd,4th,然后取消其余选项。

我需要使用像这样的循环技术,因为我需要能够使用具有不同caching名称的多个切片器的代码,但使用相同的项目列表。

我到处都是,上面的代码甚至是来自另一个问题的解决scheme。 任何帮助非常感谢!

你可以使用字典来使这个过程更加平滑一些

 With ActiveWorkbook.SlicerCaches("Slicer_test_id") Dim i For i = 1 To .SlicerItems.Count If .SlicerItems(i).Selected And Not stp.Exists(.SlicerItems(i).Caption) Then .SlicerItems(i).Selected = False End If Next i For i = 1 To .SlicerItems.Count If stp.Exists(.SlicerItems(i).Caption) Then .SlicerItems(i).Selected = True End If Next i End With 

我不清楚你为什么需要第一个循环。 我正在阅读“那么代码应该取消select切片机中不在STP中的所有项目,并select那些。 因为“只selectSTP中的那些图腾,并取消select所有其他的”,这个简化的代码将会这样做:

 With ActiveWorkbook.SlicerCaches("Slicer_test_id") Dim i For i = 1 To .SlicerItems.Count .SlicerItems(i).Selected = stp.Exists(.SlicerItems(i).Caption) Next i End With 

填充Dictionary是非常容易的

 Dim stp As New Dictionary stp.Add "73148", "73148" stp.Add "73150", "73150" stp.Add "73159", "73159" 

您需要引用Microsoft Scripting Runtime

工具>参考 C:\ WINDOWS \ Syswow64资料\的scrrun.dll

请注意,如果在列表中没有看到Microsoft Scripting Runtime ,则可以浏览到C:\Windows\SysWOW64\scrrun.dll