如何获取VBA中所有图表系列的源数据?

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")确实做了这个工作,但是如果图表中有多个系列的话,这将不起作用。

我怎样才能得到所有系列的源文件,然后如何分别更改它们?

这是一个例子

假设活动图表的系列集合正在从A1:A5C1:C5 A1:A5取值。 所以下面的代码将源代码更改为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 

截图

之前

在这里输入图像说明

在这里输入图像说明

使用.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 

更多关于这个链接 。

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

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

代码示例(由Sid提供的解决scheme):

 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使用数字来表示图表types表示。 该符号有助于省略replace公式中的图表types。

希望这可以帮助…