2
With ActiveWorkbook.Sheets(1)
INSPECT_CHARTS_NUMBER = .ChartObjects.Count
For c= 1 To .ChartObjects.Count
Set INSPECT_CHART = .ChartObjects(c).Duplicate

.ChartObjects(c).Chart.SetSourceData Source:=.Range("e4:h4")

Next lngC
End With

我执行上述操作以更改 VBA 中图表的源数据,这条线.Chart.SetSourceData Source:=.Range("e4:h4")确实可以完成工作,但如果该图表中有多个系列,这将不起作用。

如何获取所有系列的源数据,然后如何单独更改它们?

4

3 回答 3

3

这是一个例子

假设活动图表的系列集合正在从A1:A5和中选择值C1:C5。所以下面的代码会将源代码更改为A8:A12C8:C12

Dim sc As SeriesCollection
Dim i as Long, j as Long

j = 1

For i = 1 To ActiveChart.SeriesCollection.Count
    ActiveChart.SeriesCollection(i).Values = "=Sheet1!R8C" & j & ":R12C" & j
    j = j + 2 '<~~ Adding 2 for Col C
Next

截屏

在此处输入图像描述

在此处输入图像描述

于 2013-04-19T09:16:19.133 回答
3

采用.seriescollection

Set ChartSeries = ChartObj.Chart.SeriesCollection.NewSeries

With ChartSeries
    .Name = "Chart Series 1"
    .Values = Array(1, 2, 3, 4, 5)
    .XValues = Array("alpha", "beta", "gamma", "delta", "epsilon")
End With

更多关于这个链接

于 2013-04-19T09:17:12.470 回答
2

您可以通过检索系列.Formula字符串来访问图表系列的数据源。

之后,您可以更改公式(例如使用替换),然后重新应用该系列的公式。

代码示例(为 Sid 的解决方案提供):

Dim chart As ChartObject

For Each chart In ActiveSheet.ChartObjects

    Dim ser As Series

    For Each ser In chart.Chart.SeriesCollection
        Dim oF As String
        Dim nF As String
        oF = ser.Formula
        nF = Replace(oF, "$1", "$8") ' Changing the row 1 to row 8
        nF = Replace(nF, "$5", "$12") ' Changing the row 5 to row 12
        ser.Formula = nF
    Next ser

Next chart

请务必使用$符号,因为系列.Formula使用数字表示图表类型。该符号有助于省略替换公式中的图表类型。

希望这可以帮助...

于 2015-01-07T11:56:26.920 回答