我有一个堆叠的列图,我想在某些条件下hideshow一些类别。所有的解决方案,我已经找到了,工作的系列,但在需要的类别。
先谢谢你。
我在过滤我的图表时录了一个宏,以隐藏类别2,这是记录器给我的。
ActiveChart.ChartGroups(1).FullCategoryCollection(2).IsFiltered = True
我找到了一个变通的方法 然而,也许有人有一个更优雅的解决方案,这将是非常感激。
首先,我交换系列和类别。
chartSheet.ChartObjects("chart").Chart.PlotBy = xlColumns
第二,然后我检查哪一列是隐藏的,并保存一个索引为 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
第三步,在这之后,我运行所有隐藏的列,并隐藏相应的数据,我不能结合第二和第三步,因为如果任何其他列,然后最后一个,是隐藏的,vba会给出一个结果。我不能把第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