如何获取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:A5
和C1:C5
A1:A5
取值。 所以下面的代码将源代码更改为A8:A12
和C8: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。
希望这可以帮助…