20 個以上のタブがある Excel ブックがあります。
各タブには 1 つのピボット テーブルがあり、20 以上のスライサーを使用できます。ワークシート「Origin」には、すべてのスライサーをコピーして他のシートの関連するピボットテーブルにアタッチするコードを既に開発し
た他のすべてのワークシートと (わずかな変更を加えて) 共有できるスライサーが設定されています。
このプロセス中に、一意のスライサー名が作成されます。
これを拡張して、コピーされたスライサーのセットを含むシートを「オリジン」として使用できるようにします。
ここで、スライサーの名前を変更すると、現在すべてのスライサーキャッシュをループしているため、問題が発生します。スライサーが属するワークシートを識別する手段はありますか?
以下は、スライサー情報を取得するコードの一部です。これ'
注: SlicerArray は Type 配列です。
「オリジン」以外のシートでプロセスを開始すると、「****」の行が問題を引き起こします。(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