Excel 2016 VBA:将图表的源数据设置为命名表

时间:2017-09-05 20:11:43

标签: excel vba excel-vba

标题非常明显。

我有一个命名表Table_Unit_2_Data,我想将其设置为将使用VBA创建的图表的源数据。

在录制宏的过程中,我选择了整个表格,并插入了一个图表。这是我得到的代码(Build是Sheet的名称):

Sub Test()
    Range("Table_Unit_2_Data[#All]").Select
    ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select
    ActiveChart.SetSourceData Source:= Range("Build!$Y$1:$AD$2")
End Sub

嗯,首先,正如您所看到的,特定的$ A $ 1范围被传递到SetSoureData。这不起作用,因为Table_Unit_2_Data的范围会发生变化。

我试过这个:

With Sheet2.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers)
    .Chart.SetSourceData (Sheet2.Range("Table_Unit_2_Data[#All]"))
End With

但后来我收到错误“Object Required”。

我似乎无法用我的搜索查询来查找在互联网上找到这个特定问题的相关答案,所以我为问什么可能是多余的问题而道歉。如果有人可以帮我解决这个问题,我会非常感激,如果有人在网上找到一篇好的文章或资料来获取有关VBA中图表创建的细微差别的信息,这也会非常有帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

除了Domenic所说的(这是正确的+会导致“需要对象”错误),你的代码并不清楚“Sheet2”是什么,除了它是某些工作表的codename 。从记录的宏中,我可以推断出实际的表位于名为“Build”的工作表上,因此另一种可能的考虑因素是Sheet2实际上并不是Sheets(“Build”)的代号。同样,我实际上无法从提供的代码中看出来。

虽然我喜欢使用表格代号,但如果您不打算使用名称描述,我强烈建议不要使用它们。

FWIW,还有另一种方法来引用更灵活的表范围,特别是如果你要在代码中的其他地方引用表。只需创建一个ListObject变量:

Dim UnitTable2 As ListObject
Set UnitTable2 = Sheets("Build").ListObjects("Table_Unit_2_Data")

你可以很容易地引用表格的任何部分:

Dim rng As Range
'Reference the whole table, including headers:
Set rng = UnitTable2.Range
'Reference just the table data (no headers):
Set rng = UnitTable2.DataBodyRange
'Reference just the data in a single column:
Set rng = UnitTable2.ListColumns("Col1").DataBodyRange
'Reference the headers only
Set rng = UnitTable2.HeaderRowRange