我有一张包含多个图表的电子表格。我把图表的数据放在另外3张纸上。到目前为止,我一直在尝试更新图表,以便在添加数据时覆盖其他数据。
我根据我在网上看到的内容尝试了几件事。我已经尝试设置像
这样的范围Set SourceRange1 = Split(Join((GetArray(Sheets(1).Range("P6:" & GetLetterFromNumber(Sheets(1).Cells(6, Sheets(1).Columns.Count).End(xlToLeft).Column) & "6"))), "|"), "|")
Set SourceRange2 = GetArray(Sheets(2).Range("P6:" & GetLetterFromNumber(Sheets(2).Cells(6, Sheets(2).Columns.Count).End(xlToLeft).Column) & "6")))
Set SourceRange3 = Application.Union(Worksheets(3).Range("P5", Sheets(3).Cells(5, Sheets(1).Columns.Count).End(xlToLeft)), Sheets(3).Range("P6", Sheets(3).Cells(6, Sheets(3).Columns.Count).End(xlToLeft))).Value
然后将其分配给图表:
ActiveChart.SeriesCollection(1).Values = SourceRange1
ActiveChart.SeriesCollection(2).Values = SourceRange2
ActiveChart.SeriesCollection(3).Values = SourceRange3
这为我提供了当前范围P5:x5
,但它没有设置图表系列。
仅供参考,GetArray
是我创建的函数:
Function GetArray(Range1 As Range)
Dim Test() As String, cell As Range, i As Integer
i = 0
ReDim Test(0)
For Each cell In Range1
ReDim Preserve Test(i)
Test(i) = cell.Value
i = i + 1
Next cell
GetArray = Test
End Function
GetLetterFromNumber:
Function GetLetterFromNumber(Number)
GetLetterFromNumber = Split(Cells(1, Number).Address(True, False), "$")(0)
End Function
使用Set SourceRange1
之类的当前设置,我得到了
编译错误:无法分配给数组
我和其他两个人也有同样的错误。我SourceRange1-3
设置了Dim SourceRange1()
如果我将它们设置为Dim SourceRange1
,那么我得到:
运行时错误'13':
类型不匹配 在这三个方面。
如果我直接指定SeriesCollection
:
ActiveChart.SeriesCollection(1).Values = GetArray(Sheets(1).Range("P6:" & GetLetterFromNumber(Sheets(1).Cells(6, Sheets(1).Columns.Count).End(xlToLeft).Column) & "6"))
ActiveChart.SeriesCollection(2).Values = GetArray(Sheets(2).Range("P6:" & GetLetterFromNumber(Sheets(2).Cells(6, Sheets(2).Columns.Count).End(xlToLeft).Column) & "6"))
ActiveChart.SeriesCollection(3).Values = GetArray(Sheets(3).Range("P6:" & GetLetterFromNumber(Sheets(3).Cells(6, Sheets(3).Columns.Count).End(xlToLeft).Column) & "6"))
当它为SeriesCollection(1)
时,它为所有值指定0:
(20,30,40,50,60,10,20,30,40)
我确定我错过了一些简单的东西,我只是不知道是什么。如果我错过了在我的描述中放置一些东西,请告诉我,我可以添加它。
否则,我将获得所有帮助。
答案 0 :(得分:1)
要使Chart.SeriesCollection(1).Values
与Range
动态关联,请使用下面的行(假设您的SourceRange1
范围已定义为correclty):
ActiveChart.SeriesCollection(1).Values = "=" & SourceRange1.Address(True, True, xlA1, xlExternal)
使用图表时,您也可以考虑使用:
Dim Cht as Chart
Dim Ser as Series
Set Cht = ActiveChart
Set Ser = Cht.SeriesCollection(1)
With Ser
.Values = "=" & SourceRange1.Address(True, True, xlA1, xlExternal)
End With