2017-10-09 24 views
0

我有一个包含20多个选项卡的Excel工作簿。

每个标签都有一个数据透视表,并且可以有20多个切片器。

工作表“Origin”设置了与所有其他工作表共享(经过少量修改)的切片器

我已经开发了将复制所有切片器并将它们附加到其他工作表上的相关枢轴表的代码。在此过程中创建独特的切片机名称。

我现在想扩大这个范围,这样我就可以使用任何带有复制的切片组作为“原点”的工作表。

这里是我遇到问题的地方,因为我的重命名切片机目前循环所有的切片片段。是否有办法识别切片机所属的工作表?

下面是我的代码的一部分,我得到切片机信息。这是有点混乱,因为这是正在进行的工作!

注意:SlicerArray是一个Type数组。

如果我在除“起源”之外的任何其他工作表开始我的工艺,则带“****”的行会导致我出现问题。 (Slicercache中的初始项目属于原始工作表,因此从备用工作表处理缓存时找不到这些形状)。如果我可以识别属于该特定工作表的切片器,我可以绕过这一步。确定属于特定工作表的数据透视表切片器

Dim slCaches As SlicerCaches 
Dim slCache As SlicerCache 
Dim SlicerInfo(100, 6) 
Dim sh As Shape 
Dim IntIndex As Integer 
Dim SlicerArray(100) As SlicerRecord 
Dim pt As PivotTable 
Dim jSlicers As Slicers 
Dim kSlicer As Slicer 
Dim ws As Worksheet 
Dim sh_name As String 


For Each pt In ActiveSheet.PivotTables 
    For Each slCache In slCaches 
     For Each kSlicer In slCache.Slicers 
     If kSlicer.Shape.TopLeftCell.Worksheet.Name = ActiveSheet.Name Then 
      Set sh = ActiveSheet.Shapes(slCache.SourceName)'***** 
      With SlicerArray(IntIndex) 
       .PivotTable = pt.Name 
       .Name = slCache.Name 
       .SourceName = slCache.SourceName 
       .Top = sh.Top 
       .Left = sh.Left 
       .Width = sh.Width 
       .Height = sh.Height 
       .Caption = kSlicer.Caption 
       With slCache.Slicers(slCache.SourceName) 
         SlicerArray(IntIndex).Columns = .NumberOfColumns 
       End With 
       IntIndex = IntIndex + 1 
      End With 
     End If 
    Next kSlicer 
    Next slCache 
Next pt 

回答

0

我终于找到了答案。链接工作表和切片器名称可以通过数据透视表Parent.Name属性完成。我使用下面的代码来填充另一个具有相关切片器名称和相关工作表的类型数组。

IntIndex = 0 
For Each slCache In ActiveWorkbook.SlicerCaches 
    For Each PT In slCache.PivotTables 
     PT.Parent.Activate 
     'Debug.Print Slcache.Name & "," & PT.Parent.Name 
     With MySlicersSheetArray(IntIndex) 
     .StrSlicerName = slCache.Name 
     .StrSlicerSourceName = slCache.SourceName 
     .strSheetName = PT.Parent.Name 
     End With 
    Next 
    IntIndex = IntIndex + 1 
Next 
ws.Activate 
相关问题