【发布时间】:2017-04-20 17:39:23
【问题描述】:
我有一个包含多个图表的电子表格。我将图表的数据存放在另外 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)
我确定我错过了一些简单的东西,我只是不知道是什么。如果我错过了在我的描述中添加的内容,请告诉我,我可以添加它。
否则,我将不胜感激。
【问题讨论】:
-
如果你尝试
ActiveChart.SeriesCollection(1).Values = "=" & SourceRange1.Address(True, True, xlA1, xlExternal),它有效吗? -
我无法获得分配给变量 SourceRange1 的范围,但我尝试了这个
ActiveChart.SeriesCollection(1).Values = "=" & Sheets(2).Range("P6:" & GetLetterFromNumber(Sheets(2).Cells(6, Sheets(2).Columns.Count).End(xlToLeft).Column) & "6").Address(True, True, xlAl, xlExternal)并分配了值。我仍在测试,看看这是否能回答我的问题。 -
好的,告诉我
-
完美运行!把这个作为答案,我会检查它!