我想使用已知数组制作图表。以下代码正在工作:
Sub arraychart()
Dim cht As Object
Dim hhh As Variant
Set cht = ActiveSheet.ChartObjects.Add(Left:=300, Width:=300, Top:=10, Height:=300)
With cht
.Chart.SetSourceData Source:=Sheets("Data").Range("a1:d29")
.Chart.Type = xlLine
.Left = 350
.Width = 400
.Top = 30
.Height = 200
End With
End Sub
但我想使用数组 array1= Sheets("Data").Range("a1:d29") 而不是
.Chart.SetSourceData Source:=Sheets("Data").Range("a1:d29")
我怎么能编码这个?谢谢!
最佳答案
您将不得不使用 Series
的各个组件。目的。 SetSourceData
方法需要一个范围,并且不能使用 Variant 数组。
下面的示例假设 A 列中的 X 值(类别标签)和 B、C 和 D 列中的三个系列数据。根据需要进行修改。
Sub arraychart()
Dim cht As Object
Dim hhh As Variant
Dim srs as Series
Dim arrayValues as Variant
Dim arrayXValues as Variant
Dim rng as Range
Dim c as Integer
Set cht = ActiveSheet.ChartObjects.Add(Left:=300, Width:=300, Top:=10, Height:=300)
'Define the range you'll use:
Set rng = Range("A1:D29") 'modify as needed
'Define the array of X-Values to use in the chart
arrayXValues = rng.Columns(1).Value
With cht
.Chart.Type = xlLine
.Left = 350
.Width = 400
.Top = 30
.Height = 200
'Create each series in the chart
For c = 2 to rng.Columns.Count
'Define the array of values for each series
arrayValues = rng.Columns(c).Value
Set srs = .Chart.SeriesCollection.NewSeries
With srs
.XValues = arrayXValues
.Values = arrayValues
.Name = "whatever you want to name it, etc." 'Modify as needed
End With
Next
End With
End Sub
输出
这是来自示例数据的示例图表:
注意 我唯一一次这样做是由于一些公司指令,我们的图形应用程序应该生成不能轻易(或错误地)被用户或消费者修改的图表。因此,我们花了很长时间来构建、开发和支持这种方法。
它使“数据”独立于工作表/计算/等。虽然这有一些用途,比如它可以防止用户无意中“破坏”图表,但它也使普通用户很难或不可能有意地更新或修改图表。
而且,它违背了用户对图表的期望,你不能用它们来轻松地可视化数据的变化,你不能通过添加新系列或删除工作表上的现有系列等来轻松地修改它们。可能有讨厌这种方法的其他原因......
简而言之,除非您的薪水依赖于此,否则我不建议您这样做。最终,他们要求我们使用
SetSourceData
回到“正常”图表。或 Series.Formula
方法。
关于arrays - 如何从数组制作图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811947/