Как отобразить скрытые категории на круговой диаграмме Excel с помощью VBA - PullRequest
0 голосов
/ 14 мая 2018

Я часами исследовал этот вопрос безрезультатно, и объектная модель Excel, опубликованная в MSDN, не помогла. У меня есть таблица Excel с готовой круговой диаграммой, которая открывается и управляется через MS-Access VBA. Данные для отображения заполняются, и полученная диаграмма используется в отчете Access. Я не создавал оригинальную электронную таблицу, но я изменил ее для собственного использования. Пользователь указал, что одна из категорий отсутствует. Если щелкнуть правой кнопкой мыши диаграмму и нажать «Выбрать данные», откроется диалоговое окно «Выбор источника данных». Категории перечислены справа. Некоторые были не проверены. Я вручную выбрал их все, и теперь график правильный.

Вопрос в том, что я могу отменить выбор и (что более важно) повторно выбрать одну из этих категорий, используя код VBA. Я почти уверен, что могу отменить выбор категории, но как только это произойдет, похоже, что невозможно повторно выбрать. Можно ли повторно выбрать ранее выбранную категорию с помощью VBA?

1 Ответ

0 голосов
/ 23 мая 2018

Включите устройство записи макросов, затем вручную отфильтруйте некоторые категории и примените фильтр, затем сбросьте фильтры вручную.

В моей круговой диаграмме у меня были категории от «а» до «f», и я вручную отфильтровал «b» и «d», а затем восстановил их. Вот мой записанный код:

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveChart.ChartGroups(1).FullCategoryCollection(2).IsFiltered = True
    ActiveChart.ChartGroups(1).FullCategoryCollection(4).IsFiltered = True
    ActiveChart.ChartGroups(1).FullCategoryCollection(2).IsFiltered = False
    ActiveChart.ChartGroups(1).FullCategoryCollection(4).IsFiltered = False
End Sub

Чтобы сбросить фильтры категорий в круговой диаграмме, запустите это (которое я написал на основе записанного кода выше):

Sub ResetCategoryFilters()
  Dim iPt As Long, nPts As Long
  With ActiveChart.ChartGroups(1)
    nPts = .FullCategoryCollection.Count
    For iPt = 1 To nPts
      .FullCategoryCollection(iPt).IsFiltered = False
    Next
  End With
End Sub
...