在一个工作表上的所有图表上重命名多个系列

时间:2014-05-14 21:37:03

标签: excel vba charts series

我仍然是一名vba新手,所以我提前为一个简单的问题道歉。

我有大约500个图表,每个图表有两个系列(一个是聚簇列,另一个是一行)。对于每个图表,我想重命名两个系列并循环遍历工作表上的所有图表。下面是我到目前为止开始拼凑的代码。

    Sub RenameSeries()
    Dim i As Integer

    'Loops through charts
    For i = 1 To ActiveSheet.ChartObjects.Count
        With ChartObject.Chart.SeriesCollection
            .Name(1) = "Name1"
            .Name(2) = "Name2"
    End With
    Next i

    End Sub

我遇到了With ChartObject行的问题。我不确定如何迭代选择每个图表,进行这两个更改,然后转到下一个图表。提前感谢您阅读并提供您的建议。

2 个答案:

答案 0 :(得分:1)

SeriesCollection需要编入索引,而不是Name。 (每个集合只有一个Name)。

我测试了这个,但它与Tim的基本相同:

Sub RenameSeries()
    Dim ws As Worksheet
    Dim i As Integer

    Set ws = ActiveSheet
    'Loops through charts
    For i = 1 To ws.ChartObjects.Count
        With ws.ChartObjects(i).Chart
            .SeriesCollection(1).Name = "Name1"
            .SeriesCollection(2).Name = "Name2"
        End With
    Next i

End Sub

如果一个或多个图表没有2个SeriesCollections,并且您乐于忽略(跳过)这种不一致,那么您可以使用:

Sub RenameSeries()
    Dim ws As Worksheet
    Dim i As Integer

    Set ws = ActiveSheet
    'Loops through charts
    For i = 1 To ws.ChartObjects.Count
        With ws.ChartObjects(i).Chart
            .SeriesCollection(1).Name = "Name1"
            If .SeriesCollection.Count > 1 Then
                .SeriesCollection(2).Name = "Name2"
            End If
        End With
    Next i

End Sub

当然,最好调试代码以发现为什么会出现这种意外的不一致 - 也许是一个隐藏在另一个之后的流氓图表。


附注,500张图表很多。我更愿意使用组合框来动态更改数据源以减少图表。但是,我很欣赏这需要相当多的Excel知识。

答案 1 :(得分:0)

未测试:

Sub RenameSeries()
Dim i As Integer

    'Loops through charts
    For i = 1 To ActiveSheet.ChartObjects.Count
        With ActiveSheet.ChartObjects(i).Chart.SeriesCollection
            .item(1).Name = "Name1"
            .item(2).Name = "Name2"
        End With
    Next i
End Sub