Jay*_*een 4 excel vba excel-vba excel-2010
我尝试过谷歌搜索并搜索这个,但只是不能得到它.我想要做的就是遍历活动工作表上的切片器并删除切片器(如果存在).
目前我有6个切片机坐在那里.以前我有过
ActiveSheet.Shapes.Range(Array("Market Segment Name 2", "Line of Business 2" _
, "Customer Name", "Product Group Name", "Product Type Name", "Product Code") _
).Select
Selection.Delete
Run Code Online (Sandbox Code Playgroud)
但如果我已经删除了切片器,那就不好了.
现在我正在尝试(注意wb被设置为名为"Public"的模块中的全局变量)
Option Explicit
Dim sl As Slicer
Dim slName As String
Set wb = ActiveWorkbook
For Each sl In wb.SlicerCaches
If sl.Name = "Market Segment Name 2" Or _
sl.Name = "Line of Business 2" Or _
sl.Name = "Customer Name" Or _
sl.Name = "Product Group Name" Or _
sl.Name = "Product Type Name" Or _
sl.Name = "Product Name" Then
slName = sl.Name
ActiveSheet.Shapes.Range(slName).Delete
End If
Next sl
Run Code Online (Sandbox Code Playgroud)
对我而言似乎应该有效.如果我进入SlicerItem级别,我已经得到了它的工作,但我无法弄清楚如何在切片级别访问它...
任何想法将不胜感激.谢谢.
如果失败了,我将继续构建数组并删除该方法,但我仍然需要一种方法来测试切片器当前是否存在.
我有两种方法可以想到.
一个是Force方法.这里我们不检查切片器是否存在.我们只是删除它,如果它存在.例如
On Error Resume Next
ActiveSheet.Shapes.Range("Market Segment Name 2").Delete
ActiveSheet.Shapes.Range("Line of Business 2").Delete
'
'~~> And so on
'
On Error GoTo 0
Run Code Online (Sandbox Code Playgroud)
另一种方法是实际检查切片器是否存在然后将其删除.例如
Dim sl As SlicerCache
On Error Resume Next
Set sl = ActiveWorkbook.SlicerCaches("Market Segment Name 2")
On Error GoTo 0
If Not sl Is Nothing Then sl.Delete
'For Each sl In ActiveWorkbook.SlicerCaches
'Debug.Print sl.Name
'Next
Run Code Online (Sandbox Code Playgroud)
编辑:
跟进评论.
将第一个代码转换为循环.
Sub Sample()
Dim sSlicers As String
Dim Myar
Dim i As Long
'~~> Slicers you want to delete
sSlicers = "Market Segment Name 2,Line of Business 2"
sSlicers = sSlicers & "," & "Customer Name,Product Group Name"
sSlicers = sSlicers & "," & "Product Type Name,Product Code"
'~~> Split the names using "," as a delimiter
'~~> If your slicer names have "," then use a different delimiter
Myar = Split(sSlicers, ",")
For i = LBound(Myar) To UBound(Myar)
On Error Resume Next
ActiveSheet.Shapes.Range(Myar(i)).Delete
On Error GoTo 0
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)