如何在图表中程序化地隐藏删除类别?

问题描述 投票:0回答:1

我有一个堆叠的列图,我想在某些条件下hideshow一些类别。所有的解决方案,我已经找到了,工作的系列,但在需要的类别。

先谢谢你。

excel vba charts
1个回答
1
投票

我在过滤我的图表时录了一个宏,以隐藏类别2,这是记录器给我的。

ActiveChart.ChartGroups(1).FullCategoryCollection(2).IsFiltered = True

0
投票

我找到了一个变通的方法 然而,也许有人有一个更优雅的解决方案,这将是非常感激。

首先,我交换系列和类别。

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
© www.soinside.com 2019 - 2024. All rights reserved.