【发布时间】:2020-05-04 14:35:50
【问题描述】:
我有一个堆积柱形图,我想在某些条件下隐藏/显示一些类别。我发现的所有解决方案都适用于系列,但需要类别。
提前谢谢你。
【问题讨论】:
我有一个堆积柱形图,我想在某些条件下隐藏/显示一些类别。我发现的所有解决方案都适用于系列,但需要类别。
提前谢谢你。
【问题讨论】:
我在过滤图表以隐藏类别 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
第三次之后,我遍历所有隐藏的列并隐藏相应的数据。我无法将第 2 和第 3 结合起来,因为如果任何其他列(最后一列)被隐藏,vba 会给出错误。由于它尝试访问SeriesCollection,因此不再退出。
For i = 1 To UBound(tmp)
chartSheet.ChartObjects("chart").Chart.FullSeriesCollection(tmp(i)).IsFiltered = True
Next i
第四次,也是最后一次,我将系列和类别翻转回来。
chartSheet.ChartObjects("chart").Chart.PlotBy = xlRows
【讨论】: