【问题标题】:How to programatically hide/remove categories in charts?如何以编程方式隐藏/删除图表中的类别?
【发布时间】:2020-05-04 14:35:50
【问题描述】:

我有一个堆积柱形图,我想在某些条件下隐藏/显示一些类别。我发现的所有解决方案都适用于系列,但需要类别。

提前谢谢你。

【问题讨论】:

    标签: excel vba charts


    【解决方案1】:

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

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

    【讨论】:

    • 我也尝试录制宏。但对我来说,它并没有记录隐藏数据的过程。我试过你的线路,它有效。要重写我的子。谢谢。
    【解决方案2】:

    我找到了解决方法。但是,也许有人有更优雅的解决方案,将不胜感激。

    第一次我交换系列和类别。

    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
    

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 2019-01-24
      • 2011-01-16
      • 1970-01-01
      • 2017-04-01
      相关资源
      最近更新 更多