我仍然是一名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
行的问题。我不确定如何迭代选择每个图表,进行这两个更改,然后转到下一个图表。提前感谢您阅读并提供您的建议。
答案 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