我想使用已知数组制作图表。以下代码正在运行:
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")。范围(" a1:d29")代替
.Chart.SetSourceData Source:=Sheets("Data").Range("a1:d29")
我怎么能这样编码?谢谢!
答案 0 :(得分:5)
您必须使用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
<强>输出强>
以下是示例数据的示例图表:
注意我唯一一次这样做是因为某些公司指示我们的图形应用程序应该生成图表,这些图表不容易(或错误地)被用户或消费者修改。所以我们花了很长时间来构建,开发和支持这种方法。
它使&#34;数据&#34;独立于表/计算/等。虽然这有一些用途,但它可以防止用户无意中打破&#34;图表,它也使普通用户很难或不可能有意或无意地更新或修改图表。
并且,它违背了用户对图表的所有期望,您无法使用它们轻松地查看数据中的更改,您无法通过添加新系列或删除现有系列来轻松修改它们工作表等可能还有其他理由讨厌这种方法......
简而言之,除非你的薪水取决于它,否则我不建议这样做。最终,他们要求我们回到正常的&#34;使用SetSourceData
或Series.Formula
方法的图表。