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

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

0
Ale 4 Май 2020 в 17:35

2 ответа

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

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
0
Ale 4 Май 2020 в 18:05

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

ActiveChart.ChartGroups(1).FullCategoryCollection(2).IsFiltered = True
0
Jon Peltier 5 Май 2020 в 01:50