最終的に、ピボット テーブルの更新時にスライサーを異なるキャッシュに接続するコードを見つけました。基本的に、slicer1 の値が変更されると、slicer2 が slicer1 と一致するように変更され、2 番目のスライサーに接続されているピボット テーブルが更新されます。
.Application.ScreenUpdating
マクロを高速化するためにandを追加し.Application.EnableEvents
ましたが、それでも動作が遅く、Excel が応答しなくなります。
これをコーディングするより直接的な方法はありますか、またはここに潜在的に揮発性の行があり、Excel が脳を揚げますか?
Private Sub Worksheet_PivotTableUpdate _
(ByVal Target As PivotTable)
Dim wb As Workbook
Dim scShort As SlicerCache
Dim scLong As SlicerCache
Dim siShort As SlicerItem
Dim siLong As SlicerItem
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error GoTo errHandler
Application.ScreenUpdating = False
Application.EnableEvents = False
Set wb = ThisWorkbook
Set scShort = wb.SlicerCaches("Slicer_Department")
Set scLong = wb.SlicerCaches("Slicer_Department2")
scLong.ClearManualFilter
For Each siLong In scLong.VisibleSlicerItems
Set siLong = scLong.SlicerItems(siLong.Name)
Set siShort = Nothing
On Error Resume Next
Set siShort = scShort.SlicerItems(siLong.Name)
On Error GoTo errHandler
If Not siShort Is Nothing Then
If siShort.Selected = True Then
siLong.Selected = True
ElseIf siShort.Selected = False Then
siLong.Selected = False
End If
Else
siLong.Selected = False
End If
Next siLong
exitHandler:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub
errHandler:
MsgBox "Could not update pivot table"
Resume exitHandler
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Contextureで見つかった元のコード
いつもアドバイスありがとうございます。