使用VBA选择数据时图表未显示数据

时间:2019-05-13 09:07:44

标签: excel vba charts

我正在使用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

如何确保我的图表显示所选数据?

1 个答案:

答案 0 :(得分:0)

嗯,我不知道什么是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