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")
确实可以正常工作,但如果该图表中有多个系列,这将不起作用。
如何获取所有系列的源数据,然后如何单独更改它们?
答案 0 :(得分:3)
这是一个例子
假设活动图表的系列集合正在从A1:A5
和C1:C5
中选择值。因此,以下代码会将来源更改为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
<强>截图强>
在
在
答案 1 :(得分: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
有关此link的详情。
答案 2 :(得分: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 会使用图表类型表示的数字。该符号有助于省略替换公式中的图表类型。
希望这会有所帮助......