Макрос срабатывает 50% времени при смене слайсера
У меня есть особая проблема, и я не мог найти никакого решения в Интернете.
Итак, у меня есть сводная таблица, которая связана с 6 слайсерами, а также диаграмма, диапазон данных которой зависит от значений сводной таблицы.
Я создал макрос, который обновляет масштаб диаграммы каждый раз, когда изменяется значение в любой из ячеек таблицы. Вот макрос:
Public Sub worksheet_Change(ByVal Target2 As Range)
If ActiveSheet.Name = "Dashboard" Then
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DataEntryMode = xlOff
'Chart_axis Macro
Sheets("Dashboard").ChartObjects("Chart 9").Activate
If ActiveSheet.Range("B19") = "excluding CE" Then
ActiveChart.Axes(xlValue).MinimumScale = Range("E3").Value
ActiveChart.Axes(xlValue).MaximumScale = Range("E4").Value
Else
ActiveChart.Axes(xlValue).MinimumScale = Range("A3").Value
ActiveChart.Axes(xlValue).MaximumScale = Range("A4").Value
End If
ActiveChart.Refresh
ActiveSheet.Range("B18").Select
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
Чтобы работать по назначению, мне также нужно было создать функцию, которая считывает активные элементы слайсера:
Public Function GetSelectedSlicerItems(SlicerName As String) As String
Application.Volatile
Set coll = New Collection
Dim cache As Excel.SlicerCache
Dim i As Integer
Set cache = ActiveWorkbook.SlicerCaches(SlicerName)
Dim sItem As Excel.SlicerItem
Dim result As String
For Each sItem In cache.SlicerItems
If sItem.Selected And sItem.HasData Then
'Debug.Print sItem.Name
'Debug.Print sItem.HasData
'GetSelectedSlicerItems = (sItem.Name)
coll.Add sItem.Name
End If
Next sItem
For i = 1 To coll.Count
'Debug.Print coll(i)
result = result & coll(i) & ", "
Next i
result = Left(result, Len(result) - 2)
GetSelectedSlicerItems = result
End Function
Моя проблема в том, что, хотя значение функции всегда обновляется при изменении элемента слайсера, макрос делает это только случайным образом примерно в 50% случаев.
Скриншот моего отчета:
Формулы, содержащие выбранную функцию элементов слайсера, находятся в правом верхнем углу.
Так есть ли у вас идеи, как заставить его работать в 100% случаев?
Заранее спасибо,
Алан
Изменить: я забыл добавить, что это только проблема, если выделен только один слайсер. Когда я выбираю несколько слайсеров (Ctrl+ клик), это всегда работает.