Как программно скрыть / удалить категории в чартах? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть столбец с накоплением столбцов, и я хочу скрыть / показать некоторые категории при определенных условиях. Все решения, которые я нашел, работают для серий, но нуждаются в категориях.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Я записал макрос, пока отфильтровал диаграмму, чтобы скрыть категорию 2, и вот что дал мне рекордер:

ActiveChart.ChartGroups(1).FullCategoryCollection(2).IsFiltered = True
0 голосов
/ 04 мая 2020

Я нашел обходной путь. Однако, может быть, у кого-то есть более элегантное решение, оно будет высоко оценено.

1-й, я поменяюсь серией и категориями.

chartSheet.ChartObjects("chart").Chart.PlotBy = xlColumns

2-й, затем я проверяю, какой столбец скрыт, и сохраняю индекс для FullSeriesCollection. С небольшим запутанным способом получить имя листа и адрес столбца, где расположены данные.

    Dim i As Long, k As Long
    Dim tmp() As Variant
    Dim sh As String, col As String
    For i = 1 To Sheet2.ChartObjects("tst").Chart.SeriesCollection.Count
        If Worksheets(Split(Split(Sheet2.ChartObjects("tst").Chart.SeriesCollection(i).Formula, ",")(2), "!")(0)) _
        .Range(Split(Split(Sheet2.ChartObjects("tst").Chart.SeriesCollection(i).Formula, ",")(2), ":")(1)).EntireColumn.Hidden = True Then
            k = k + 1
            ReDim Preserve tmp(1 To k)
            tmp(k) = i
        End If
    Next i

3-й после этого я бегу по всем скрытым столбцам и скрываю соответствующие данные. Я не смог объединить 2-й и 3-й, потому что если какой-либо другой столбец, а последний - скрыт, vba выдает ошибку. Так как он пытается получить доступ к SeriesCollection, который больше не выходит.

For i = 1 To UBound(tmp)
        chartSheet.ChartObjects("chart").Chart.FullSeriesCollection(tmp(i)).IsFiltered = True
Next i

4-й и, наконец, я переворачиваю серии и категории обратно.

chartSheet.ChartObjects("chart").Chart.PlotBy = xlRows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...