我有一个带有 20 多个选项卡的 Excel 工作簿。
每个选项卡都有一个数据透视表,可以有 20 多个切片器。
工作表“Origin”设置了切片器,可以与所有其他工作表共享(稍作修改)
我已经开发了代码,该代码将复制所有切片器并将它们附加到其他工作表上的相关数据透视表。在此过程中会创建唯一的切片器名称。
我现在想扩展它,以便我可以使用任何带有一组复制切片器的工作表作为“原点”。
这是我遇到问题的地方,因为我对切片器的重命名当前循环遍历所有切片器缓存。有没有办法识别切片器所属的工作表?
下面是我获取切片器信息的代码的一部分。它'
注意: SlicerArray 是一个类型数组。
如果我在“Origin”以外的任何其他工作表上开始我的流程,带有“****”的行会给我带来问题。(Slicercache 中的初始项目属于 Origin 表,因此在处理来自备用工作表的缓存时找不到这些形状)。如果我可以识别属于该特定工作表的切片器,我可以解决这个问题。
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