首页 > 解决方案 > 使用 vba 选择数据时图表不显示数据

问题描述

我正在使用 VBA 来更新我的图表。使用 VBA,我选择应该在图表中显示的数据。我的代码确实选择了数据,但不知何故我的图表没有显示任何内容。当我点击我的图表结束时选择“选择数据”它确实显示了选定的数据,但不知何故我的图表仍然是空的。因为我的图表是空的,所以我的其余代码不起作用

我的图表是一个组合图表,其中两个数据范围都是条形,主轴上是绝对值,次轴上是相对值。

    Dim DataSite As Range
    Dim DataAbsolute As Range
    Dim DataRelative As Range

    Set DataSite = Range(Cells(7, 1), Cells(7, 1).End(xlDown))
    Set DataAbsolute = Range(Cells(7, 4), Cells(7, 4).End(xlDown))
    Set DataRelative = Range(Cells(7, 5), Cells(7, 5).End(xlDown))

    GraphsFrames.Select
    For Each serie In cht.Chart.SeriesCollection
        serie.Select
        serie.Delete
    Next serie

    With cht.Chart
        With .SeriesCollection.NewSeries
            .XValues = DataSite
            .Values = DataAbsolute
            .Name = "Absolute"
            .AxisGroup = 1
        End With

        With .SeriesCollection.NewSeries
            .Values = DataRelative
            .Name = "Relative"
            .AxisGroup = 2
        End With
        .ChartGroups(1).GapWidth = 50
        .ChartGroups(2).GapWidth = 300
        .Refresh
    End With

我可以做些什么来确保我的图表显示所选数据?

标签: excelvbacharts

解决方案


好吧,我不知道 GraphFrames 是什么,所以我忽略了它。我只对您的代码进行了细微的调整,如下所示,它工作得很好。我假设数据在活动工作表上,您要向其中添加数据的图表对象也是如此。

Sub DoChartData()
    Dim DataSite As Range
    Dim DataAbsolute As Range
    Dim DataRelative As Range

    With ActiveSheet
        Set DataSite = .Range(.Cells(7, 1), .Cells(7, 1).End(xlDown))
        Set DataAbsolute = .Range(.Cells(7, 4), .Cells(7, 4).End(xlDown))
        Set DataRelative = .Range(.Cells(7, 5), .Cells(7, 5).End(xlDown))
    End With

    Dim cht As ChartObject
    Set cht = ActiveSheet.ChartObjects(1)

    Dim serie As Series
    For Each serie In cht.Chart.SeriesCollection
        serie.Delete
    Next serie

    With cht.Chart
        With .SeriesCollection.NewSeries
            .XValues = DataSite
            .Values = DataAbsolute
            .Name = "Absolute"
            .AxisGroup = 1
        End With

        With .SeriesCollection.NewSeries
            .Values = DataRelative
            .Name = "Relative"
            .AxisGroup = 2
        End With
        .ChartGroups(1).GapWidth = 50
        .ChartGroups(2).GapWidth = 300
    End With
End Sub

推荐阅读