首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标识属于特定工作表的数据透视表切片器

标识属于特定工作表的数据透视表切片器
EN

Stack Overflow用户
提问于 2017-10-09 22:07:14
回答 2查看 1.1K关注 0票数 0

我有一个带有20+标签的Excel工作簿。

每个选项卡都有一个数据透视表,并且可以有20+切片器。

工作表"Origin“设置了切片器,可以与所有其他工作表共享(只需稍加修改)

我已经开发了复制所有切片器并将它们附加到其他工作表上的相关数据透视表的代码。在此过程中会创建唯一的切片器名称。

我现在想要扩展它,这样我就可以使用任何带有复制的切片器集的工作表作为“原点”。

这就是我遇到问题的地方,因为我对切片器的重命名当前循环通过所有的切片器。有没有办法识别切片器所属的工作表?

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

注意: SlicerArray是一个类型数组。

如果我在"Origin“之外的任何其他工作表上开始我的进程,带有”*“的行会给我带来问题。( Slicercache中的初始项目属于原始表,因此在处理备用工作表中的缓存时不会找到这些形状)。如果我能识别出属于该特定工作表的切片器,我就可以绕过这个问题。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2017-10-12 23:21:06

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

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2021-06-24 08:30:31

使用kSlicer.name而不是slCache.SourceNamekSlicer.name也是对象形状的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46648431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档