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